如何从头开始完全实现 PNG 解码器

How to implement a PNG decoder completely from scratch

出于学习目的,我开始使用 PNG encoding/decoding 库,所以我想手动实现它的每个部分。

我用了很长时间,但现在有点卡住了。以下是我已经成功实施的事情:

这就是我卡住的地方。我依稀知道这里的步骤是:

我的问题是:

  1. 是的。您可以查看 puff.c,这是一个 inflate 实现,其明确目的是作为如何解码 deflate 流的指南。

  2. 图像的每一行可以使用不同的过滤器,在解压行的第一个字节中指定。

  3. 是的,如果你做对了,那么你将得到一个像素序列,其中每个像素都是一个灰度值,G,具有 alpha 通道,GA,RGB(红色-绿-蓝,按此顺序)或 RGBA。