zlib headers 如何存储在 png 中的多个 IDAT 块中

How zlib headers are stored in multiple IDAT chunks in png

我正在学习 png 的工作原理,并尝试使用“纯”C++ 创建一个简单的 PNG 解码器。

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

我阅读了关于 zlib 的 RFC 1950。 https://www.rfc-editor.org/rfc/rfc1950

第一个块中只有一个 zlib header。 IDAT 块系列是一个 单个 zlib 流,分成多个部分。

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