c# .net gdi jpeg2000

Soporte JPEG 2000 en C#.NET



gdi jpeg2000 (6)

Parece que .NET no puede abrir archivos JP2 (Jpeg 2000) usando la biblioteca GDI. He buscado en google pero no puedo encontrar ninguna biblioteca o código de ejemplo para hacer esto.

¿Alguien tiene alguna idea? Realmente no quiero pagar por una biblioteca para hacerlo a menos que tenga que ...


Estaba buscando algo similar hace un tiempo, con la idea de implementar uno si pudiera; Las respuestas a mi pregunta implican que no hay un método documentado para hacer esto para GDI + que usa la clase Image en .Net.

Creo que si está escribiendo una aplicación WPF, puede ampliar la lista de formatos de imagen compatibles a través de los códecs de los componentes de Windows Imanging , y puede que ya haya uno (pregunte a su motor de búsqueda local).

Hay una opción para usar un complemento como DotImage que admite JPEG2000, aunque puede haber más "esfuerzo" involucrado en la carga de imágenes.


He usado Leadtools para mostrar imágenes JPEG 2000. Proporcionan una biblioteca .NET que incluye los controles WPF y WinForms para mostrar las imágenes. Sin embargo, hay un precio razonablemente alto.


Para cualquiera que llegue a esta antigua publicación, el código anterior de Gordon funciona muy bien, pero como señaló jixtra, de hecho obtendrá una excepción: System.DllNotFoundException: ''No se puede cargar la DLL'' FreeImage '': no ​​se pudo encontrar el módulo especificado. '' durante la instalación a través de nuget. Pude hacerlo funcionar en .net 4.6.1 instalando el paquete de nuget FreeImage-dotnet-core y agregando manualmente FreeImage.dll a la carpeta bin. Puede descargar la dll aquí: http://freeimage.sourceforge.net/download.html .

Necesitaba una imagen de mejor calidad para usar con tesseract, así que hice algunos cambios menores que hicieron una gran diferencia en la calidad del nuevo 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);


Parece que podemos hacerlo usando FreeImage (que es gratis)

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);


Puede usar la biblioteca Jpeg2000.Net si necesita una solución totalmente administrada sin bloques inseguros. Descargo de responsabilidad: estoy trabajando en esta biblioteca, la biblioteca es comercial.

Aquí está la muestra básica para la decodificación de la imagen JPEG 2000 a 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); }


Tal vez debería retirar this proyecto.