3

我有一个HBITMAP,我想尽快将它转换为 png 格式(在内存中我有 malloc'd),所以我的问题是我应该使用GDI+orlibpng吗?

我试过使用GDI+,但它似乎没有我想要的那么快。我也试过FreeImage了,太慢了。

4

1 回答 1

2

在我的测试中,使用默认设置运行 libpng 大约比 GDI+ 慢 2 到 3 倍,但往往会生成更高压缩的 png 文件。

结果因输入位图而异。在一个极端情况下,我有一个 1680x1050 位图,libpng 需要大约 1.23 秒才能将其编码为 1531k png;GDI+ 只用了 0.35 秒来处理该位图,但它的 png 却高达 2391k。但是对于另一个相同大小的位图(实际上是这个堆栈溢出页面的屏幕抓取),libpng 在 0.305 秒内生成了 294k png,而 GDI+ 在 0.097 秒内生成了 318k png。

根据 pngcheck,GDI+ 生成的 png 不进行任何行级预测过滤,并且还使用快速版本的 zlib 压缩。Libpng 使用“默认 zlib 压缩”,并且似乎还根据行及其邻居的内容使用不同的预测过滤器。据推测,您可以使用png_set_compression_level()libpng 来产生类似于 GDI+ 给您的大小/速度折衷。

最后一点——我在 png 测试中使用了 PNG_INTERLACE_NONE。PNG_INTERLACE_ADAM7 似乎真的会损害 png 压缩率,所以除非你真的想要渐进式渲染图像,否则我会避免使用它。

于 2013-04-30T05:14:32.540 回答