2009-02-26 24 views
18

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

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

Respuesta

20

parece que lo podemos hacer usando FreeImage (que es gratuito)

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

gracias por guiarme. +1 para tu respuesta. Pero después de mostrar imágenes jpeg200 en el formulario de mi ventana, recibo una excepción debido a que dib es nulo. ** Se lanzó una excepción en la línea de procesamiento. ---> System.ArgumentNullException: el valor no puede ser nulo. Nombre del parámetro: dib en FreeImageAPI.FreeImage.GetBitmap (FIBITMAP dib, Boolean copyMetadata) en FreeImageAPI.FreeImage.GetBitmap (FIBITMAP dib) **. Mientras realizaba la depuración, descubrió que el método ** static FIBITMAP LoadEx (string filename, FREE_IMAGE_LOAD_FLAGS flags, ref. Formato FREE_IMAGE_FORMAT) ** me devuelve una estructura {0} que causa la excepción anterior. –

+1

Aparece una excepción de módulo no encontrado con el último paquete de numeración de FreeImage – jjxtra

2

Tal vez deba pagar this proyecto.

+2

Esto se basa en J #, que no es en Visual Studio 2008 + – jjxtra

2

Estaba buscando algo similar hace un tiempo, con miras a implementar uno si pudiera; El responses to my question implica que no hay método documentado para hacer esto para GDI + que usa la clase de imagen en .Net.

Creo que si usted está escribiendo una aplicación de WPF, a continuación, puede ampliar la lista de formatos de imagen compatibles a través Windows Imanging Components codecs, y no puede ser uno por ahí ya (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.

2

He usado Leadtools para mostrar JPEG 2000 imágenes. Proporcionan una biblioteca .NET que incluye controles WPF y WinForms para mostrar las imágenes. Sin embargo, existe una etiqueta de precio razonablemente pronunciada.

1

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

necesitaba una mejor calidad de imagen para su uso con Tesseract así que hice algunos cambios menores que hizo una gran diferencia en la calidad de la nueva 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); 
Cuestiones relacionadas