Как правильно кодировать фрагменты метаданных с помощью libpng? - PullRequest
0 голосов
/ 24 марта 2019

У меня проблемы с кодированием метаданных в изображении 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
...