C#.NET支持JPEG 2000

似乎.NET无法使用GDI库打开JP2(Jpeg 2000)文件。 我在谷歌搜索但找不到任何库或示例代码来执行此操作。

有人有任何想法吗? 除非我必须,否则我真的不想为图书馆付费。

好像我们可以使用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); 

我不久前正在寻找类似的东西,以期尽可能地实施一个; 对我的问题的回答意味着没有文档化的方法为GDI +执行此操作,.Net中的Image类使用该方法。

我相信如果您正在编写WPF应用程序,那么您可以通过Windows Imanging Components编解码器扩展支持的图像格式列表,并且可能已经有一个(请问您当地的友好搜索引擎?)

可以选择使用支持JPEG2000的插件,例如DotImage ,尽管加载图像可能会有更多的“努力”。

我用Leadtools来显示JPEG 2000图像。 它们提供了一个.NET库,包括WPF和WinForms控件来显示图像。 但是,价格相当陡峭。

也许你应该结帐这个项目。

对于遇到这篇老post的人来说,Gordon的上述代码效果很好,但正如jixtra指出的那样,你确实会得到一个exception:System.DllNotFoundException:’无法加载DLL’FreeImage’:找不到指定的模块。 “ 通过nuget安装时。 通过安装FreeImage-dotnet-core nuget包并手动将FreeImage.dll添加到bin文件夹,我能够在.net 4.6.1中运行它。 你可以在这里下载dll: http : //freeimage.sourceforge.net/download.html 。

我需要一个质量更好的图像与tesseract一起使用,所以我做了一些小改动,这对新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);