Java - codificador imagenes en java

 
Vista:

codificador imagenes en java

Publicado por Sara (4 intervenciones) el 20/03/2006 09:22:59
Hola!!

Estoy intentando realizar un programa en java, para codificar una imagen pixel a pixel.

Hasta el momento solo he conseguido el siguiente trozo de código:
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.Raster;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.media.jai.PlanarImage;

public class Codec {

BufferedImage imagenCodif; // declaramos imagenCodif como nuestro bufferedImage
Raster raster; //Para leer y guardar la informacion de una imagen se utiliza la Clase Raster.
/*ColorModel modeloColor = imagenCodif.getColorModel(); // obtenemos el modelo de color*/

short h = (short) imagenCodif.getHeight(); // obtenemos la altura
short w = (short) imagenCodif.getWidth(); // obtenemos la anchura
int tipoImagen = imagenCodif.getType()
int formatoImagen = imagenCodif.getRGB(w,h);
/*
* Hasta aqui no esta mal, ahora debemos crear nuestro bufferedImage (int h, int w, int imageType) y de esta manera ya podemos
* guardar la informacion en el fichero con el FileOutputStream, una vez guardados ya podermos recuperarlos. Si no obtenemos la
* misma imagen que la inicial, sabemos que los datos que hemos guardado no son suficientes. Lo del FileOutputStream no deberemos
* hacerlo con el ImageIO *
* */

Esto es lo que he conseguido encontrar hasta el momento.

Seguramente deberé utilizar la clase getPixels de java, pero la verdad es que no se como hacerlo.

Necesitaria ayuda para terminar el programa.

Muchas Gracias

sara
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:codificador imagenes en java

Publicado por manru (161 intervenciones) el 21/03/2006 04:35:48
Hola Sara:

Fijate si esto puede ayudarte http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/PixelGrabber.html

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:codificador imagenes en java

Publicado por Sara (4 intervenciones) el 21/03/2006 10:09:21
Hola Manru!

Muchas gracias por tu respuesta.

He estado mirando la web pero no entiendo muy bien lo que hace con esos métodos.

Hace poquito que estoy JAVA y la verdad, me cuesta bastante.

He estado mirando java.sun y también está grabPixels pero no se exactamente en que se diferencia al handlesinglepixel(...).

También he mirado el ColorModel...

Tengo mucho lio y no se por donde empezar.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:codificador imagenes en java

Publicado por manru (161 intervenciones) el 21/03/2006 13:37:42
Hola Sara:

Porque no me dices que es lo que quieres hacer con los pixeles?, de esa forma podre ayudarte mejor
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:codificador imagenes en java

Publicado por Sara (4 intervenciones) el 21/03/2006 23:28:38
He de coger pixel a pixel de una imagen para conseguir guardar esa imagen en un fichero.

Para coger los pixels hay dos maneras:

1- Coger un pixel con sus 3 bytes R-G-B y luego el siguiente y así sucesivamente

2. Coger primero el rojo de todos los pixels, luego el verde y luego el azul: RRRRR....GGGGG......BBBBB.....alpha

El muestreo que utilizamos es el 4:4:4

He de ir guardando los pixels en un fichero y me dicen de hacerlo con ObjectOutputStream y ObjectInputStream y ha de ser serializable, es decir que se pueda guardar y recuperar.

Muchas Gracias por tu ayuda

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:codificador imagenes en java

Publicado por manru (161 intervenciones) el 22/03/2006 01:14:06
Hola Sara:

Bueno, realmente me parece que estas un poco confundida.
Antes que nada, no hace falta que utilizes ObjectInputStream ni ObjetOutputStream si es que vas a guardar la imagen en formato RAW, es decir como un array de bytes que representan colores de un cuadrado de, digamos 20 x 20.

Si te estas preguntando que es RAW... Raw es una imagen sin formato, es decir, un archivo que solo tiene adentro información de datos pero no informacion de formato (realmente esto es muy extenso y complicado, perdona si resumo)

Distinto es que necesites guardar la imagen como JPG, GIF, PNG o BMP

Entonces ... si tienes que guardarla como RAW basta con que utilices un FileOutputStream una vez que consigas obtener los pixeles.
Si necesitas guardarla como JPG o etc, el procedimiento es muy distinto.

De todas formas para obtener los pixeles has esto:

img es la imagen a la que le tienes que obtener los pixeles

int w = img.getWidth(null);
int h = img.getHeight(null);
int [] pixels = new int[w * h];
PixelGrabber pg = new PixelGrabber(img,0,0,w,h,pixels,0,w);
try {
pg.grabPixels();
}
catch(InterruptedException ie) {
ie.printStackTrace();
}
En este punto tendras los pixeles de la imagen en el array de enteros llamada pixels

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:codificador imagenes en java

Publicado por sara (4 intervenciones) el 22/03/2006 19:36:28
El array puede ser de bytes?

Después de lo que me has pasado, también debería usar el getPixels y el getColorModel.

Y una vez esto he de utilizar el getRed() getGreen() y getBlue para obtener los colores del pixel no?

Muchas Gracias

SAludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:codificador imagenes en java

Publicado por manru (161 intervenciones) el 23/03/2006 00:56:02
El array es de enteros.
Como tu sabes un entero vale 4 bytes es decir 32 bits.
Descomponiendo cada entero tendras el ALPHA, RED, GREEN, BLUE
0xAARRGGBB

suponiendo que pixel es un entero

byte alpha = ((pixel >>> 24) & 0xFF);
byte red = ((pixel >>> 16) & 0xFF);
byte green = ((pixel >>> 8) & 0xFF);
byte blue = ((pixel >>> 0) & 0xFF);

de todas formas puedes consultar el colormodel al PixelGrabber
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar