java javax.imageio jai

java - JAI e ImageIO para Windows de 64 bits



javax.imageio (3)

Estaba tratando de verificar la productividad de Java de 32 bits con su DLL de Windows MediaLib nativo en Windows 7. Se muestra que es un poco más lento (5-10%) que solo el código Java puro de 64 bits.

Probé JAI con filtrado de mediana para imágenes b / n bastante grandes de 1 bit (tamaño de 9000 x 2500 píxeles). Con un filtro mediano de 7 x 7, cuesta 17 segundos para los procesos con librerías de Windows (DLL) nativas de 32 bits y 15 segundos con Java puro de 64 bits sin DLL. La prueba se repitió 3-4 veces con resultados de temporización muy similares.

Salida de depuración para Java + 32 nativo MediaLib de 32 bits:

Raster path is "F:/Projects/Fadeev/listv.bmp" Median size value set to 7 Output file will be saved to input directory Data color set to default value java.awt.Color[r=255,g=0,b=0] (RED) Color distance set to default value 20,00 New color set to default value java.awt.Color[r=255,g=0,b=0] (RED) Image ( 9000 x 2461 ) read in 00:00:00.038 Image color quantized at 00:00:01.400 **Image filtered by () at 00:00:17.531** (MediaLib works now and here!!!) Image stored at 00:00:00.356 (storing in PNG!) Total time is 00:00:19.325

Salida de depuración para Java puro de 64 bits:

Raster path is "F:/Projects/Fadeev/listv.bmp" Median size value set to 7 Output file will be saved to input directory Data color set to default value java.awt.Color[r=255,g=0,b=0] (RED) Color distance set to default value 20,00 New color set to default value java.awt.Color[r=255,g=0,b=0] (RED) Image ( 9000 x 2461 ) read in 00:00:00.038 Image color quantized at 00:00:00.910 Error: Could not load mediaLib accelerator wrapper classes. Continuing in pure Java mode. Occurs in: com.sun.media.jai.mlib.MediaLibAccessor com.sun.media.jai.mlib.MediaLibLoadException **Image filtered by () at 00:00:13.802** Image stored at 00:00:00.414 Total time is 00:00:15.164

Busqué en la biblioteca de JAI e ImageIO para ventanas de 64 bits, pero no encontré ninguna versión de estas. Solicitud de la última versión de 64 bits en el sistema de seguimiento de errores de Java hace 6-7 años.

Creo que los desarrolladores de jai no lanzarán ninguna versión para win64. :(

Mi pregunta es, ¿podemos construir jai e imageio desde su fuente para ventanas de 64 bits, es posible? ¿Cómo?

muchas gracias...


JAI y JAI Image I / O tienen dos partes desde el punto de vista del idioma de origen, java y C / C ++. La parte java es gratuita (como cerveza gratuita) y puede descargar y compilar desde java.net, pero esta es una fuente java, sin importar la arquitectura (x86, x64).

SUN no publica el código fuente de C / C ++, por lo que solo obtiene el .dll compilado para Win32 y otras plataformas. Este código fuente no se publica debido a varias razones, una es que SUN usa fuentes de terceros y tiene el derecho de usarlo, no de redistribuirlo (libremente).

Nos contactamos con SUN hace tres años para detectar varios errores presentes en el códec de 12 bits JPEG I / O JPEG de JAI y brindan algunas opciones. Si estos errores son urgentes para nosotros, podemos proporcionarles a los programadores de C / C ++ que los resuelvan, y SUN nos proporciona el código fuente de codecLib si firmamos un NDA (Acuerdo de no divulgación). La otra opción era esperar a que SUN resolviera los problemas. Brindamos asistencia al ingeniero de SUN asignado a los errores y lo resolvió en menos de una semana.

Ahora la situación parece ser diferente, ya que JAI y los proyectos relacionados (Image I / O) ya no están activos, es decir, nadie está trabajando en ellos (nuevas versiones, corrección de errores).

Por lo tanto, eventualmente tendrá muchos problemas con JAI si necesita nuevas versiones.

Puede usar el JRE de 32 bits para ejecutar programas que usan JAI en sistemas operativos de 64 bits como Windows 7 x64.

Desafortunadamente, no puede usar JAI o Image I / O en un JRE de 64 bits, ya que solo puede usar la funcionalidad disponible en Java puro y la mayoría de los códecs perdidos en Image I / O.

Otra pregunta es lo que realmente necesitas de JAI. JAI se puede usar usando la implementación Java 100% pura (versión de software), más lento pero resuelve los problemas de x64. JAI Image I / O también tiene alguna funcionalidad que puede ser implementada por Java 100% puro, pero la mayoría de ellos, como los códecs, requieren dll nativo como codedLib.