C#.NET支持JPEG 2000

时间:2009-02-26 13:11:22

标签: c# .net gdi jpeg2000

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

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

6 个答案:

答案 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);
}