因此,读取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以查看要使用哪个滤波器函数?
答案 0 :(得分:3)
过滤类型可以是每行的五种类型中的任何一种。在隔行扫描图像的情况下,每个“子图像”(最多7次通过)被视为一个独立的图像,其每一行可以有不同的过滤器。
http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html
当图像交错时,交错图案的每次通过都是 作为过滤目的的独立图像处理。过滤器 研究由实际发送的像素形成的字节序列 在通过期间,“之前的扫描线”是先前的扫描线 在同一通道中传输,而不是在完整的相邻通道中传输 图片。请注意,在任何一个传递中传输的子图像总是如此 矩形,但宽度和/或高度比完整的宽 图片。当此子图像为空时,不应用过滤。
答案 1 :(得分:2)
任何图像中的所有扫描线,无论它们是否是隔行扫描。将具有过滤器类型前缀。