Bal*_*ros
1
algorithm
png
zlib
image-processing
deflate
为了学习目的,我开始研究 PNG 编码/解码库,所以我想手动实现它的每个部分。
我已经花了很长时间了,但现在我有点卡住了。以下是我已经成功实施的事情:
- 我可以加载 PNG 二进制文件并浏览它的字节
- 我可以读取元数据的签名和 IHDR 块
- 我可以读取 IDAT 块并将图像数据连接到缓冲区中
- 我可以从上述图像数据中读取并解释 zlib 标头
这就是我陷入困境的地方。我隐约知道这里的步骤是:
- 根据头提取 zlib 压缩数据
- 找出所使用的过滤方法并“撤消”它们以获取原始数据
- 如果一切顺利,现在我拥有以下形式的原始 RGB 数据
[<R of 1st pixel>, <G of 1st pixel>, <B of 1st pixel>, <R of 2nd pixel>, <G of 2nd pixel>, etc...]
我的问题是:
- 是否有任何易于理解的实现(也许带有示例)或关于 zlib 提取的指南,因为我发现官方规范很难理解
- 同一个文件中可以使用多种过滤方法吗?如何弄清楚这些?如何弄清楚这些不同过滤部分的“边界”?
- 我对最终数据的理解是否正确?Alpha 通道或使用调色板时怎么样?