繁体   English   中英

Zlib在C中解压缩未知压缩长度的字节

[英]Zlib decompress bytes with unknown compressed length in C

我正在尝试在没有任何外部库的情况下编写自己的 png 阅读器。 我需要使用 Zlib 来解压缩 png 的 IDAT 块。 我已经设法使用zlib.decompress()在 python 中完成它,并且我试图在 C 中复制它。我正在阅读 zlib 的文档并找到uncompress() ,但是它需要一个我不知道的目标长度。

我可以将目的地设置为比 png 可能大得多,但这似乎是一种逃避,如果我有一个真正的大局,它会破坏我的程序。 但是,我发现了一个可以多次使用的函数inflate() 如果我能做到这一点,我可以在每次调用时重新分配realloc()内存。 然而,我不太了解它的文档,也没有找到很多关于这类事情的例子。 谁能提供一些代码或帮助我指明正确的方向?

知道目的地的长度。 确切地。 PNG 标头信息告诉您每个像素有多少行、多少列和多少字节。 将其全部相乘,为过滤每行添加一个字节,您就有了答案。

分配那个数量的内存,然后解压成那个。

请注意,可以有多个 IDAT 块,但将它们组合起来包含一个 zlib 流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM