2010-08-06 90 views
3

我有一个HBITMAP,我想将它转换为png格式(在内存中我有malloc'd)尽可能快,所以我的问题是我应该去GDI+libpng哪个更快,GDI +或libpng?

我试过使用GDI+,但它看起来并不像我希望的那样快。 我也试过FreeImage,它太慢了。

+1

这是一个简单的问题,你可以尝试两种解决方案,看看有什么不同。 – SigTerm 2010-08-06 19:24:33

+1

不要拿我的话说,但从我回忆起我的GDI +经验来看,它的速度很慢。 – 2010-08-06 21:20:49

+0

好的,谢谢你们,我会尽快给它回复并回复结果 – user413396 2010-08-07 01:37:31

回答

1

在我的测试中,使用其默认设置运行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压缩比率,所以我会避免它,除非你真的想要渐进渲染你的图像。