【问题标题】:Which is faster, GDI+ or libpng?哪个更快,GDI+ 还是 libpng?
【发布时间】:2011-03-26 12:18:39
【问题描述】:

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

我尝试过使用GDI+,但它似乎没有我希望的那么快。 我也试过FreeImage,速度太慢了。

【问题讨论】:

  • 这是一个简单的问题,你可以尝试两种解决方案,看看有什么不同。
  • 不要相信我的话,但从我回忆起使用 GDI+ 的经验来看,它所做的一切都很慢。
  • 好的,谢谢大家,我会尽快尝试并回复结果

标签: c++ gdi+ libpng freeimage


【解决方案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 压缩比,所以我会避免使用它,除非你真的想要渐进式渲染图像。

【讨论】:

    猜你喜欢
    • 2014-05-16
    • 2012-06-12
    • 2010-09-29
    • 2011-03-14
    • 2012-07-15
    • 2011-09-22
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多