Поддержка JPEG 2000 в C # .NET - PullRequest
       147

Поддержка JPEG 2000 в C # .NET

19 голосов
/ 26 февраля 2009

Кажется, что .NET не может открывать файлы JP2 (Jpeg 2000) с помощью библиотеки GDI. Я искал в Google, но не могу найти библиотеки или пример кода для этого.

У кого-нибудь есть идеи? Я действительно не хочу платить за библиотеку, чтобы сделать это, если я не должен ..

Ответы [ 6 ]

20 голосов
/ 21 июля 2010

Похоже, что мы можем сделать это, используя 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);
2 голосов
/ 25 ноября 2009

Я использовал Leadtools для отображения изображений JPEG 2000. Они предоставляют библиотеку .NET, включая элементы управления WPF и WinForms для отображения изображений. Тем не менее, есть достаточно крутой ценник.

2 голосов
/ 26 февраля 2009

Некоторое время назад я искал нечто подобное, чтобы реализовать его, если смогу; Ответы на мой вопрос означают, что не существует документированного метода , который бы делал это для GDI +, который использует класс Image в .Net.

Я считаю, что если вы пишете приложение WPF, то вы можете расширить список поддерживаемых форматов изображений с помощью кодеков Windows Imanging Components , и там может быть одним из них уже (спросите у вашей местной дружественной поисковой системы?)

Существует возможность использовать дополнение, такое как DotImage , которое поддерживает JPEG2000, хотя при загрузке изображений может потребоваться больше «усилий».

2 голосов
/ 26 февраля 2009

Может быть, вам стоит оформить заказ в этом проекте.

1 голос
/ 25 января 2019

Вы можете использовать библиотеку 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);
}
1 голос
/ 15 января 2018

Для всех, кто сталкивался с этим старым постом, вышеприведенный код от Gordon прекрасно работает, но, как указал jixtra, вы действительно получите исключение: System.DllNotFoundException: 'Unable to load DLL' FreeImage ': указанный модуль не может быть найденным.' при установке через нугет. Я смог заставить его работать в .net 4.6.1, установив пакет nuget FreeImage-dotnet-core и вручную добавив FreeImage.dll в папку bin. Вы можете скачать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...