似乎.NET无法使用GDI库打开JP2(Jpeg 2000)文件。我在谷歌搜索但找不到任何库或示例代码来执行此操作。
有人有任何想法吗?除非我必须这样做,否则我真的不想为图书馆支付费用。
答案 0 :(得分: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);
答案 1 :(得分:2)
也许你应该结帐this项目。
答案 2 :(得分:2)
我一直在寻找类似的东西,以期尽可能地实施一个; responses to my question意味着没有记录的方法为GDI +执行此操作,.Net中的Image类使用该方法。
我相信如果您正在编写WPF应用程序,那么您可以通过Windows Imanging Components codecs扩展支持的图像格式列表,并且可能已经在那里(请问您的本地友好搜索引擎?)
可以选择使用支持JPEG2000的DotImage等插件,尽管加载图片时可能会有更多的“努力”。
答案 3 :(得分:2)
我使用Leadtools来显示JPEG 2000图像。它们提供了一个.NET库,包括WPF和WinForms控件来显示图像。但是,价格相当陡峭。
答案 4 :(得分:1)
对于遇到这篇旧帖子的人来说,上面的代码来自Gordon,但是正如jixtra指出的那样,你确实会得到一个异常: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);
答案 5 :(得分:1)
如果您需要一个不受不安全限制的完全托管解决方案,则可以使用Jpeg2000.Net library。免责声明:我正在使用此库,该库是商业库。
这是将JPEG 2000图像解码为TIFF的基本示例:
string fileName = ...; // path to JPEG 2000 image
using (var image = new J2kImage(fileName))
{
var options = new J2kDecodingOptions
{
UpsampleComponents = true
};
// Alternatively, you can decode only part of the image using J2kImage.DecodeArea method
var imageData = image.Decode(options);
imageData.Save(tiffFileName, J2kOutputFormat.Tiff);
}