如何将zlib流转换为PNG?

时间:2018-05-01 16:06:04

标签: c++ c png zlib libpng

我已经有一个zlib编码的图像数据流(取自PDF / FlateDecode标签)。我还得到了像素的宽度和高度以及颜色深度(8 bpp)。数据是打包的RGB。 现在我想将其保存为PNG图像(我认为默认的压缩方法也是ZLIB?)。 我尝试手动添加PNG标头和IDAT标头,但它不起作用。 有谁有想法,如何正确吗? (libpng?)

目标系统的RAM资源非常有限,因此解码zlib数据并使用libpng重新编码是不可能的。

1 个答案:

答案 0 :(得分:3)

您需要解压缩,重新格式化PNG数据并重新压缩。在PNG文件中压缩的图像数据不仅仅是原始RGB数据。每the specification,图像的每一行前面都有一个过滤字节,它指定该行与先前数据的区别(或不同)。即使您没有进行差分,也需要该字节来表示。但是,使用其中一种过滤模式可以获得更好的压缩效果。