Compatibilidad con JPEG 2000 en C # .NET

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 para que una biblioteca lo haga a menos que tenga que …

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

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

Creo que si está escribiendo una aplicación WPF, puede extender la lista de formatos de imágenes admitidos a través de códecs Windows Imanging Components , y puede que ya exista uno (pregunte en su motor de búsqueda local).

Existe la opción de usar un complemento como DotImage que sea compatible con 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 controles WPF y WinForms para mostrar las imágenes. Sin embargo, existe una etiqueta de precio razonablemente pronunciada.

Tal vez deberías pagar este proyecto.

Para cualquiera que se encuentre con esta publicación anterior, el código anterior de Gordon funciona muy bien, pero como señaló jixtra, de hecho recibirá 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 imagen de mejor calidad para usar con tesseract, así que hice algunos pequeños cambios que marcaron 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);