2010-08-06 92 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壓縮比率,所以我會避免它,除非你真的想要漸進渲染你的圖像。