Consulta sobre tratamiento de imagenes como...

mjjmarkos
28 de Diciembre del 2009
Buenas. Me llamo Marcos, y soy de Sevilla.

Tengo que realizar un proyecto sobre fractales y necesitaría algo de información.

Mi duda es que necesito abrir un archivo por ejemplo BMP (blanco y negro nada más, ni siquiera tonos grises), y tratar la imagen como si fuese una tabla de números (cuyo valor es el valor del color en RGB o lo que sea), y pueda compararla "con otra tabla de números" (otra imagen).

Desconozco si existe el procedimiento y si pudiese al menos diseñarlo.

La idea sería crear un objeto de imagen en una ventana, y en dicho objeto estaría cargada mi imagen pero necesito acceder pixel a pixel (como si recorriese una tabla de filas y columnas) y sacar "el color" que tiene dicho pixel, para compararlo con otro.

¿Es posible?

¿Se podría hacer de otra forma dicha comparación entre dos imagenes (solo necesito saber si el color es el mismo en el mismo pixel o distinto)?

¿Es esa realmente la forma en que se "abre" un archivo de imagen en Java?

Siento la duda y si está resuelta pido disculpas, estuve buscando y no encontré nada.

Gracias por vuestro tiempo y a la espera de ayuda quedo.

Un abrazo.

kool_084
28 de Diciembre del 2009
en Java existen varias formas de hacer lo que requieres asi coma API\\'s especializadas en ello lo ideal en tu caso seria que verifiques si alguna API hace lo que tu necesitas, aunque realmente no he visto nada parecido, en todo caso deberias probar con JAI(Java advanced image)

Otra posibilidad seria que obtengas los pixeles de la imagen, para ello lo haces a partir de un BufferedImage algo asi

bi.getData().getPixels(x, y, w, h, data);

asumiendo bi sea tu BufferedImage de la imagen original, los valores son posicion inicial en x e y, ancho, alto y el arreglo de datos, este metodo retorna un arreglo de valores, elige de preferencia enteros pues es mas facil tratarlos, aunque depende de tu logica, en todo caso es un entero RGB

tambien podrias obtener pixel a pixel con

bi.getRGB(x, y);

oo podrias usar un PixelGrabber aunque esta esta un poco desactualizado, al final el resultado sera similar, sin embargo debes tomar en cuenta que con PixelGrabber debes llamar al metodo \"grabPixels()\" para lllenar el arreglo de datos, espero te sirba de algo, Suerte.