2009-02-26 53 views
18

似乎.NET無法使用GDI庫打開JP2(Jpeg 2000)文件。我搜索了谷歌,但無法找到任何庫或示例代碼來做到這一點。C#.NET支持JPEG 2000

有人有什麼想法嗎?我真的不想支付一個圖書館去做,除非我必須..

回答

20

好像我們可以使用FreeImage(這是免費的)

FIBITMAP dib = FreeImage.LoadEx("test.jp2"); 
//save the image out to disk  
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, "test.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYNORMAL); 
//or even turn it into a normal Bitmap for later use 
Bitmap bitmap = FreeImage.GetBitmap(dib); 
+0

感謝您的指導。你的答案+1。但在我的窗體上渲染jpeg200圖像後,由於dib爲空,我得到了異常。**在渲染管道中拋出異常。 ---> System.ArgumentNullException:值不能爲空。參數名稱:在FreeImageAPI.FreeImage.GetBitmap(FIBITMAP dib)**處的FreeImageAPI.FreeImage.GetBitmap(FIBITMAP dib,布爾copyMetadata)處的dib。調試時,發現該方法**靜態FIBITMAP LoadEx(字符串文件名,FREE_IMAGE_LOAD_FLAGS標誌,ref FREE_IMAGE_FORMAT格式)**返回結構{0},導致上述異常。 – 2014-02-11 11:02:57

2

也許你應該結帳this項目。

+2

這依賴於J#這是不是在Visual Studio 2008 + – jjxtra 2009-07-22 14:13:43

2

我一直在尋找類似的東西,以期實施一個,如果我可以; responses to my question意味着沒有記錄的方法對GDI +執行此操作,而.NET中的Image類使用此方法。

我相信,如果你正在寫一個WPF應用程序,那麼你可以通過Windows Imanging Components codecs擴展支持的圖像格式的列表,並有可能一個在那裏已經(向您當地的友好的搜索引擎?)

有一個選項可以使用支持JPEG2000的插件,如DotImage,雖然在加載圖像時可能會有更多的「努力」。

2

我用Leadtools來顯示JPEG 2000圖像。他們提供了一個.NET庫,包括WPF和WinForms控件來顯示圖像。但是,價格標籤相當陡峭。

1

對於任何人碰到這個老後到來,從戈登上面的代碼的偉大工程做,但作爲jixtra指出的那樣,你確實會得到一個異常:System.DllNotFoundException:'無法加載DLL'FreeImage':找不到指定的模塊。'當通過nuget安裝時。我可以通過安裝FreeImage-dotnet-core nuget軟件包並手動將FreeImage.dll添加到bin文件夾中來使其在.net 4.6.1中工作。你可以在這裏下載dll:http://freeimage.sourceforge.net/download.html

我需要一個更好的圖像質量,所以我做這做了一個巨大的差異,以新的JPEG質量的一些小的改動與正方體使用:

var jp2Format = FREE_IMAGE_FORMAT.FIF_JP2; 
var dib = FreeImage.LoadEx("test.jp2", ref jp2Format); 

FreeImage.SetResolutionX(dib, 300); 
FreeImage.SetResolutionY(dib, 300); 
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, "test.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYSUPERB);