Zlib解压缩C中压缩长度未知的字节
Zlib decompress bytes with unknown compressed length in C
我正在尝试在没有任何外部库的情况下编写自己的 png reader。我需要使用 Zlib 来解压缩 png 的 IDAT 块。我已经设法在 python 中使用 zlib.decompress()
完成了它,并且我试图在 C 中复制它。我正在阅读 zlib 的文档并找到 uncompress()
,但是它需要一个目标长度我不知道。
我可以将目标设置为比 png 可能大得多,但这似乎是一种逃避,如果我有一张非常大的图片,它会破坏我的程序。但是,我发现了一个可以多次使用的函数inflate()
。如果我能做到这一点,我可以 realloc()
内存(如果每次调用都需要)。但是我不太了解它的文档,也没有找到很多此类事情的例子。谁能提供一些代码或帮助我指明正确的方向?
您确实知道目标长度。确切地。 PNG header 信息告诉您每个像素有多少行、多少列和多少字节。全部相乘,每行加一个字节进行过滤,你就有了答案。
分配那个内存量,然后解压到那个内存量。
请注意,可以有多个 IDAT 块,但它们组合起来包含一个 zlib 流。
我正在尝试在没有任何外部库的情况下编写自己的 png reader。我需要使用 Zlib 来解压缩 png 的 IDAT 块。我已经设法在 python 中使用 zlib.decompress()
完成了它,并且我试图在 C 中复制它。我正在阅读 zlib 的文档并找到 uncompress()
,但是它需要一个目标长度我不知道。
我可以将目标设置为比 png 可能大得多,但这似乎是一种逃避,如果我有一张非常大的图片,它会破坏我的程序。但是,我发现了一个可以多次使用的函数inflate()
。如果我能做到这一点,我可以 realloc()
内存(如果每次调用都需要)。但是我不太了解它的文档,也没有找到很多此类事情的例子。谁能提供一些代码或帮助我指明正确的方向?
您确实知道目标长度。确切地。 PNG header 信息告诉您每个像素有多少行、多少列和多少字节。全部相乘,每行加一个字节进行过滤,你就有了答案。
分配那个内存量,然后解压到那个内存量。
请注意,可以有多个 IDAT 块,但它们组合起来包含一个 zlib 流。