用libpng编码元数据块的正确方法是什么?

时间:2019-03-24 18:24:40

标签: c libpng

我在使用libpng编码PNG图像中的元数据时遇到麻烦。我正在编写一个绘图软件,涉及将自由能热图导出为PNG图像。一切都可以正常处理图像,但是我尝试为作者,源代码等编写的块无法正确显示。

我目前已经尝试使用以下代码使用大写而不是大写的关键字,结果没有差异。我也尝试将块放置在png文件的各个位置,但均未成功。我不确定自己在做什么错,因为规范说该块应该是一个关键字,后跟一个空字符,然后是该块的字段,并且该字段不是以null结尾的

目前,我正在尝试使用此代码编写代码块

    /* 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

0 个答案:

没有答案