相关疑难解决方法(0)

试图了解PNG文件中的zlib/deflate

我目前正在为了学习目的而自己编写一个小的PNG图像I/O库.我的问题如下:

我创建了一个尺寸仅为2 x 2的小PNG,并在十六进制编辑器中打开它以研究其内容.这是我使用GIMP创建的图像,并以压缩"9"存储.

(请注意,这是原始2 x 2像素图像的放大图像;))

一个二乘二像素的黑色,红色,蓝色和绿色像素.

所以我猜没有压缩,这在内存中看起来像这样:

00 00 00 FF 00 00 00 00 FF 00 FF 00
Run Code Online (Sandbox Code Playgroud)

存储时没有alpha通道.

(为了清楚起见,我在这里只说了这个.我知道压缩,并且不希望在文件中看到这个字节模式).

我提取了IDAT块并剥离了块ID("IDAT")和尾随CRC值并得到了这个字节序列:

08 D7 05 C1 01 01 00 00 00 80 10 FF 4F 17 10 48 06 0F FE 02 FE
Run Code Online (Sandbox Code Playgroud)

现在前两个字节08 D7包含有关编码块的信息.最后四个字节0F FE 02 FE必须是ADLER32校验和.

这最终让我得到以下字节:

05 C1 01 01 00 00 00 80 10 FF 4F 17 10 48 06
Run Code Online (Sandbox Code Playgroud)

以二进制表示形式写的这些字节是:

0000 0101  1100 0001  0000 0001  0000 0001
0000 0000 …
Run Code Online (Sandbox Code Playgroud)

implementation encoding png deflate

8
推荐指数
2
解决办法
2570
查看次数

标签 统计

deflate ×1

encoding ×1

implementation ×1

png ×1