zlib标头如何存储在png

时间:2018-06-15 12:22:42

标签: png zlib

我正在学习png是如何工作的,并试图用“纯粹的”C ++创建一个简单的PNG解码器。

我的问题是我不知道zlib标头是如何存储在多个 IDAT-PNG块中的。第一个IDAT块看起来很好 - 正常的“CM”和“CINFO”,但是当我读取下一个IDAT块时,zlib头看起来很奇怪,“CM”可以是一个随机数 - 默认情况下不是8,而是“CINFO”可以高于7 - 我认为数字大于7的“CINFO”被标记为已损坏/不可接受。那么我在哪里可以找到有关此的一些信息? - 我没有找到任何关于在网络上处理多个IDAT块的信息。 (呃,我在这里找到了一些东西 - 在“StackOverFlow”中,但它似乎没有描述zlib头如何存储在多个IDAT块中,所以它不回答我的问题)

我阅读了关于zlib的RFC 1950。 https://tools.ietf.org/html/rfc1950

1 个答案:

答案 0 :(得分:2)

第一个块中只有一个zlib头。 IDAT系列块是一个单个 zlib流,分为几部分。

您需要更仔细地阅读PNG规范。