2010-12-03 32 views

回答

5

我已經花了不少時間用FJCore和LibJpeg.Net。 FJCore更容易使用,因爲它是從Java移植過來的,並且有一個對象模型,它與您期望在C#中看到的內容模糊不清。然而,LibJpeg.NET是迄今爲止更完整的庫(它基於非正式的規範libjpeg),並且它也顯着更快。舉一個例子,FJCore使用反向離散餘弦變換的簡單實現,涉及1024次乘法和每個8x8塊的附加1024次加法。相比之下,LibJpeg.NET使用高性能的AAN算法,只需要144次乘法和464次加法(見http://datasheets.chipdb.org/Intel/x86/MMX/MMX/AP528.HTM#AAN Algorithm)。另外,FJCore在使用內存方面效率相當低,不斷重新創建可以輕鬆重用的對象。同時,由於FJCore的優化次數較少,因此更容易入侵。

對於我當前的項目(涉及爲Silverlight編寫視頻編解碼器),我使用FJCore作爲起點,修復了一大堆低效率問題,用LibJpeg.NET替換了IDCT算法,最後有些東西給了我約10倍的原始表現。

+0

喜肯的EncodeJpeg()方法,你可以分享你更新的代碼,以FJCore源?同樣在你自己在兩個圖書館的質量和壓縮方面的經驗,你認爲哪個更好? – cubski 2011-05-13 00:04:00

+0

當我在上面的回答中使用術語「黑客」時,我並不是在開玩笑。雖然我試圖不打破原始FJCore庫中的任何內容,但我的主要擔心是修改它以適用於我的特定Motion JPEG風格的視頻編解碼器,但並不便於其他人使用。也就是說,看到這個答案(http://stackoverflow.com/questions/1773330/streaming-a-webcam-from-silverlight-4-beta)鏈接到我的修改後的代碼的稍早版本。 – 2011-05-13 16:15:59