小编Kev*_*ker的帖子

如何在没有压缩的情况下解码PNG文件的IDAT块

我在Photoshop中创建了一些4x4像素,16位灰度图像,并将它们保存为非压缩,无交错,PNG文件.我正在尝试编写一个程序来从这些文件中提取图像数据,但我对IDAT块有点困惑.这是出于自我教育的目的,所以我没有使用图书馆.

下面是其中一个图像的IDAT块的十六进制代码,其中每个像素都是白色.

十六进制代码

我在这一点上用我认为理解的颜色编码.

红色 =忽略,因为它是IEND块的一部分,与IDAT无关.
黄色 =块信息.前4个黄色字节是数据长度.第二个4个黄色字节是块标识符.图像末尾的最后4个黄色字节是循环冗余校验.
Blue = zlib压缩格式信息.其中第一个蓝色字节是压缩方法和压缩信息.第二个蓝色字节是标志信息.图像底部附近的最后四个蓝色字节是ADLER-32校验和.我假设在这种情况下没有DICTID.
Gray = Deflate压缩算法的信息.在第一个灰色字节中,第一位是最后一个块标记,第二位和第三位是编码方法.第一个灰色字节的其余部分将被忽略.由于该方法是非压缩方法,所以第二和第三灰色字节是块中数据字节的长度,第四和第五灰色字节是第二和第三灰色字节的一个补码.
No Box =使用LZ77算法压缩的图像数据(由于未压缩方法,没有霍夫曼码),该算法使用8位表示潜在的重复长度,15位表示搜索返回距离.

我正在理解错误的东西,或者我不理解如何正确地使用LZ77算法解码图像中没有框的字节.如果有人能够纠正我或表明我不理解,我会非常感激.谢谢.

algorithm graphics png file-format deflate

6
推荐指数
1
解决办法
2195
查看次数

标签 统计

algorithm ×1

deflate ×1

file-format ×1

graphics ×1

png ×1