.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);
对于遇到此旧帖子的任何人,Gordon 的上述代码效果很好,但正如 jixtra 指出的那样,您确实会遇到异常: System.DllNotFoundException: 'Unable to load DLL 'FreeImage': The specified module could not be found。 ' 通过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);
不久前我一直在寻找类似的东西,如果可以的话,我希望实现一个;对我的问题的回答暗示没有记录的方法可以为.Net 中的 Image 类使用的 GDI+ 执行此操作。
我相信,如果您正在编写 WPF 应用程序,那么您可以通过Windows Imaging Components 编解码器扩展支持的图像格式列表,并且可能已经有一个(询问您本地友好的搜索引擎?)
可以选择使用支持 JPEG2000 的DotImage等插件,尽管在加载图像时可能需要更多“努力”。
我使用Leadtools显示 JPEG 2000 图像。它们提供了一个 .NET 库,包括 WPF 和 WinForms 控件来显示图像。然而,有一个相当高的价格标签。
如果您需要一个没有不安全块的完全托管的解决方案,您可以使用Jpeg2000.Net 库。免责声明:我正在开发这个库,该库是商业的。
以下是将 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);
}