PNG文件过滤方法

时间:2014-06-16 04:39:06

标签: image png decoding

因此,读取PNG文件规范表明在压缩之前,图像被过滤。目前仅定义了过滤方法0(IHDR块中的第二个最后一个字节)。方法0有5组过滤功能:

0 =无 1 =子
2 =上升 3 =平均值
4 = Paeth

解码此类数据时,隔行扫描的PNG图像是否只有0以外的滤波器类型?这是解压缩后的相同数据:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
-----------------------------------------------
00 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f
7f 7f 7f 7f 7f 7f 10 0f 22 22 7f 7f 7f 7f 7f 7f
7f 00 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f
7f 7f 13 43 07 11 38 2e 2d 33 25 29 09 62 1b 7f
7f 7f ...

注意00每32个字节表示一个"无"过滤方案。我的问题是,这只会出现在非交错图像中吗?这是否意味着隔行扫描图像具有过滤功能1,2,3或4?如果是这样,在我的解码过程中,我必须读取33个字节并取第一个并测试它是否为0x01,0x02,0x03或0x04以查看要使用哪个滤波器函数?

2 个答案:

答案 0 :(得分:3)

过滤类型可以是每行的五种类型中的任何一种。在隔行扫描图像的情况下,每个“子图像”(最多7次通过)被视为一个独立的图像,其每一行可以有不同的过滤器。

http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html

  

当图像交错时,交错图案的每次通过都是   作为过滤目的的独立图像处理。过滤器   研究由实际发送的像素形成的字节序列   在通过期间,“之前的扫描线”是先前的扫描线   在同一通道中传输,而不是在完整的相邻通道中传输   图片。请注意,在任何一个传递中传输的子图像总是如此   矩形,但宽度和/或高度比完整的宽   图片。当此子图像为空时,不应用过滤。

答案 1 :(得分:2)

任何图像中的所有扫描线,无论它们是否是隔行扫描。将具有过滤器类型前缀。