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