Tag: adler32

具有IDAT的调色板基本PNG,其BTYPE = 00,无压缩,现在使用Adler32代码

我正在研究一些代码,它们可以构建基于调色板的简单PNG文件,而不需要libpng。 输出文件,在此阶段只有IHDR,PLTE,IDAT(x3)和IEND块。 唯一可能有点不同的是,IDAT块中的像素索引值未被压缩,即各种zlib /块头字节如下。 CMF = 0x78。 FLG = 0x9C(此处还有一些其他值,但总是清零第5位)。 块头字节= 0x01(BFINAL = 1,BTYPE = 00)。 从我可以看到代码正确构建文件,但是一些图像查看器拒绝完全显示图像,如果有的话。 MS Paint很高兴。 GIMP很高兴。 LibreOffice Draw很开心。 Ristretto >>读取PNG图像文件时出现致命错误:压缩数据不够。 ImageMagick >>识别:没有足够的图像数据`20160317_PNG_064.png’@ error / png.c / MagickPNGErrorHandler / 1645。 Gnome之眼>>没有足够的图像数据。 我已经通过几个不同的工具放置文件,同样混合结果。 optipng >>没有足够的图像数据。 pngchunks不会报告任何错误。 pngcheck不会报告任何错误。 这是文件20160317_PNG_064.png的hex视图 它产生的图片是这个小的8×8像素图像 。 关于接下来要尝试什么,我有点死路一条。 任何和所有的帮助表示赞赏。 EDIT_000根据@Mark Adler的要求,将问题缩小到Adler32计算是用于在主函数中使用测试数据计算Adler32值的代码。 顺便说一句,它不是很花哨,而且编码非常冗长。 #include #define DEBUG static const unsigned long GC_ADLER32_BASE […]