GDI+和libpng哪个更快?

3

我有一个 HBITMAP,想要尽可能快地将其转换为 png 格式(在内存中进行了 malloc),所以我的问题是应该选择 GDI+ 还是 libpng

我尝试使用 GDI+,但它似乎不够快。 我也尝试过 FreeImage,但速度太慢了。


1
这是一个简单的问题,你可以尝试两种解决方案并比较它们的差异。 - SigTerm
1
不要完全相信我的话,但根据我对GDI+的经验回忆,它在执行任何操作时都很慢。 - Collin Dauphinee
好的,谢谢大家。我很快就会尝试并回复结果。 - user413396
1个回答

2
在我的测试中,使用默认设置运行libpng的速度大约比GDI+慢2到3倍,但倾向于产生更高压缩率的png文件。
结果取决于输入位图的情况。在一个极端情况下,我有一个1680x1050的位图,libpng需要约1.23秒将其编码为1531k的png;GDI+仅需要0.35秒处理该位图,但它的png大小达到了2391k。但对于另一个相同大小的位图(实际上是此stack overflow页面的屏幕截图),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的压缩比,因此除非您确实需要图像的渐进式呈现,否则最好避免使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接