Parece que .NET no se puede abrir JP2 (Jpeg 2000) archivos de uso de la biblioteca GDI. He buscado en google pero no puede encontrar cualquiera de las librerías o de código de ejemplo para ello.

Alguien tiene alguna idea? Yo realmente no quieren pagar por una biblioteca de hacerlo a menos que tengo que..

6 Comentarios

  1. 20

    Parece que puede 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);
    • gracias por guiarme. +1 por ur respuesta. Pero después de la prestación de jpeg200 imágenes en mi ventana, yo estoy haciendo excepción debido a dib como null.**Se produjo una excepción en el proceso de representación. —> Sistema.ArgumentNullException: Valor no puede ser nulo. Nombre de parámetro: dib en FreeImageAPI.FreeImage.GetBitmap(FIBITMAP dib, Boolean copyMetadata) en FreeImageAPI.FreeImage.GetBitmap(FIBITMAP dib)** . Durante la depuración,se encontró que el método de estática FIBITMAP LoadEx(string filename, FREE_IMAGE_LOAD_FLAGS banderas, ref FREE_IMAGE_FORMAT formato) me devuelve una estructura {0} que hace que la anterior excepción.
    • Tengo un módulo no encontrado, a excepción de la última de FreeImage paquete de nuget
  2. 2

    Yo estaba buscando algo similar hace un tiempo, con miras a la aplicación de uno si pudiera; El las respuestas a mi pregunta implica que no hay documentado método para hacer esto de GDI+ que la Imagen de la clase .Net utiliza.

    Creo que si usted está escribiendo una aplicación de WPF, a continuación, puede ampliar la lista de formatos de imagen soportados a través de Windows Imanging Componentes de codecs, y no puede ser uno por ahí ya (pregunte a su local de amistoso de motor de búsqueda?)

    Hay una opción para usar un addon como DotImage que soporta el formato JPEG2000, aunque puede haber más «esfuerzo» que intervienen en la carga de imágenes.

  3. 2

    He usado Leadtools para mostrar imágenes JPEG 2000. Ellos proporcionan un .Biblioteca de RED, incluyendo WinForms y WPF controles para mostrar las imágenes. Sin embargo, hay un nivel razonablemente alto precio de etiqueta.

  4. 1

    Para cualquier persona que viene a través de este viejo post, el anterior código de Gordon funciona muy bien, pero como jixtra señaló, que de hecho va a obtener una excepción: System.DllNotFoundException: ‘no se puede cargar el archivo DLL ‘FreeImage’: El módulo especificado no se pudo encontrar. » cuando la instalación a través de nuget. Yo era capaz de conseguir lo trabajan .net 4.6.1 por la instalación de la FreeImage-dotnet-core paquete de nuget y añadir manualmente las FreeImage.dll en la carpeta bin. Usted puede descargar el archivo dll aquí: http://freeimage.sourceforge.net/download.html.

    Necesitaba una mejor calidad de imagen para su uso con tesseract así que he hecho un par de 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);
  5. 1

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

    Aquí es la base de la muestra para la decodificación de 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);
    }

Dejar respuesta

Please enter your comment!
Please enter your name here