使用zlib解压缩PNG

时间:2010-03-29 02:43:07

标签: c gcc png zlib

如何使用zlib库解压缩PNG文件?我需要在gcc编译器下使用C读取PNG文件。

4 个答案:

答案 0 :(得分:4)

为什么不使用libpng? PNG文件格式相当简单,但有许多不同的可能变体和编码方法,确保覆盖所有情况可能相当繁琐。像libpng这样的东西会自动处理所有的转换和东西。

答案 1 :(得分:2)

如果这是一项家庭作业,并且您实际上仅限于标准C库,那么您需要查看官方的PNG文件格式规范:http://www.w3.org/TR/PNG/。但是,你确定你真的需要解码PNG文件吗?如果您只需要以某种方式展示它,那么您就走错了路。

为任何一般的PNG文件编写解码器会相当复杂和耗时,但对于简单的PNG文件来说并不算太糟糕。事实上,因为PNG格式允许对其进行压缩,所以只使用标准C库就需要实现gzip解压缩(对于中级本科课程来说,这是一个合理的作业,但我的猜测就是你在分配给你之前,我会花很多时间讨论压缩算法。

但是,如果将自己局限于非压缩的非隔行PNG文件,则并不是非常困难。我用Python编写了一个解码器,只用了几个小时处理了简单的情况,所以我相信它在C中是可行的。

答案 2 :(得分:2)

我曾经编写过一个用于读取/写入PNG文件的基本Java库:http://code.google.com/p/pngj/

它不支持托盘图像,但除此之外 [更新:它现在支持所有PNG变体]它相当完整,简单且代码没有外部依赖(即它只使用标准的JSE API,包括zip解压缩)。代码可用。我想你可以毫不费力地将它移植到C语言。

答案 3 :(得分:0)

您应该阅读二进制文件格式的工作原理,并使用十六进制编辑器而不是文本编辑器来查看文件。一般来说,你应该使用libpng来处理前面所述的png文件,但是如果你想自己解码它,你有很多阅读要做。

我建议您阅读此http://www.libpng.org/pub/png/book/chapter13.html