У меня проблемы с кодированием метаданных в изображении PNG с использованием libpng.Я пишу графическое программное обеспечение, которое включает в себя экспорт тепловой карты свободной энергии в виде PNG-изображения.С изображением все работает правильно, но фрагменты, которые я пытаюсь написать для автора, источника и т. Д., Не отображаются должным образом.
В настоящее время я пробовал следующий код с ключевыми словами, которые пишутся с большой буквы, а не:без разницы в результатах.Я также безуспешно пытался разместить куски в разных местах файла png.Я не уверен, что я делаю неправильно, потому что в спецификации сказано, что чанк должен быть ключевым словом, за которым следует нулевой символ, а затем поле для чанка, и поле не заканчивается нулем
В настоящее время япытаюсь записать чанки с помощью этого кода
/* Chunk variables */
png_bytep chunkname;
png_bytep data;
char *ChunkName;
char *ChunkData;
/* ... */
ChunkData = ( char* ) malloc ( 255 * sizeof ( char ) );
ChunkName = ( char* ) malloc ( 255 * sizeof ( char ) );
chunkname = ( png_bytep ) ChunkName;
data = ( png_bytep ) ChunkData;
/* ... */
sprintf ( ChunkData, "author" );
sprintf ( ChunkData + 7, "%s", UsrName );
sprintf ( ChunkName, "tEXt" );
png_write_chunk ( png_ptr, chunkname, data, 7 + strlen ( UsrName ) );
Я хочу, чтобы информация во вспомогательных чанках правильно отображалась в средствах просмотра изображений и в pngchunks, но в настоящее время она не отображается, и pngchunks выдает следующее сообщение длякаждый из моих текстовых кусков
Chunk: Data Length 12 (max 2147483647), Type 1951942004 [tEXt]
Ancillary, public, PNG 1.2 compliant, safe to copy
... Unknown chunk type
Chunk CRC: 1209883642