Sei sulla pagina 1di 42

PROCESAMIENTO DE

IMGENES
Java Intermedio
Imagen
Una imagen es un
arreglo rectangular
bidimensional de
pixeles.
Cada pixel
representa el color
en la posicin de la
imagen.
Julio 2014

miriam.balbuena@gmail.com
Heigh
t
(alto)
Width
(ancho)
Modelos de color
Julio 2014

miriam.balbuena@gmail.com
CMYK RGB
Canales de color
Existen distintos
modelos de color.
El ms comn es el
RGB y RGBA.
El canal Alpha
determina la
transparencia.
Julio 2014

miriam.balbuena@gmail.com
Manipulacin de imgenes
Una aplicacin en Java puede:
Mostrar una imagen.
Manipularla (modificarla
aplicando filtros)
Dibujar texto, lneas y otros
grficos sobre la imagen.
Guardar la imagen en un
archivo.
Julio 2014

miriam.balbuena@gmail.com
Clases principales
Julio 2014 miriam.balbuena@gmail.com

java.awt.Image
Superclase que representa una imagen como un
arreglo rectangular de pixeles
java.awt.image.BufferedImage
Hereda de Image y permite a una aplicacin
operar directamente con los datos de la imagen.
Por ejemplo, recuperar o cambiar el color de un
pixel.
BufferedImage
Julio 2014 miriam.balbuena@gmail.com

java.awt.image.BufferedImage
El API Java 2D almacena el contenido de la
imagen en memoria.
Una aplicacin puede crear un objeto
BufferedImage u obtener una imagen a partir
de un archivo externo como PNG o GIF
BufferedImage
Julio 2014 miriam.balbuena@gmail.com

Tiene un modelo de color (ColorModel) y un Raster de la
informacin de la imagen.
ColorModel provee una interpretacin del color de la imagen.
Raster realiza las siguientes funciones:
Representa las coordenadas rectangulares de la imagen
Mantiene la imagen en memoria
Provee un mecanismo para crear mltiples subimagenes
Provee mtodos para acceder a pixeles especficos.
Cargando una imagen.
Julio 2014 miriam.balbuena@gmail.com

Se debe transformar la imagen de un archivo con formato, a
una representacin interna.
javax.imageio
Soporte:
GIF
PNG
JPEG
BMP
WBMP
Cargar imagen desde archivo
Julio 2014 miriam.balbuena@gmail.com

BufferedImage img = null;
try {
img = ImageIO.read(
new File("strawberry.jpg"));
} catch (IOException e) {
}
En un applet
Julio 2014 miriam.balbuena@gmail.com

try {
URL url = new URL(getCodeBase(),
"strawberry.jpg");
img = ImageIO.read(url);
} catch (IOException e) {
}
Dibujando la imagen
Julio 2014 miriam.balbuena@gmail.com

boolean Graphics.drawImage(Image img,
int x, int y,
ImageObserver observer);
Ejemplo
Julio 2014 miriam.balbuena@gmail.com

Crear proyecto ProcesaImagenes
Crear clase ComponenteImagen
Componente Imagen
Julio 2014 miriam.balbuena@gmail.com

Las imgenes son representaciones
abstractas.
Swing no ofrece un componente especfico
para mostrar imgenes.
Aunque se pueden usar etiquetas para hacerlo.
Crearemos el componente grfico para
mostrar imgenes.
Julio 2014 miriam.balbuena@gmail.com
Clase ProcesaImagenes
Julio 2014 miriam.balbuena@gmail.com

Agregamos una barra de men a la
ventana.
Julio 2014 miriam.balbuena@gmail.com

Inicializamos los componentes
Julio 2014 miriam.balbuena@gmail.com

Abrir una imagen y mostrarla.
Julio 2014 miriam.balbuena@gmail.com

Probamos el
cdigo
Por qu no se ve la imagen?
El mtodo pack le solicita
al Layout que ajuste la
ventana.
El Layout utiliza el tamao
preferido de los
componentes para
determinar el tamao de
la ventana.
Julio 2014

miriam.balbuena@gmail.com
Estableciendo tamao preferido al
ComponenteImagen.
Julio 2014 miriam.balbuena@gmail.com

Probamos el
cdigo
Julio 2014 miriam.balbuena@gmail.com

Agrega un menuItem al men Archivo que se llame:
Abrir URL.
Implementa su Action Listener para abrir la imagen
desde un URL
Abre un cuadro de dilogo dnde se reciba la URL
como cadena.
Usa JOptionPane.showInputDialog ();
Para convertir el String en URL:
URL url = new URL (cadena);
Ejercicio
Agregamos un panel que contenga
controles.
Julio 2014 miriam.balbuena@gmail.com

Julio 2014 miriam.balbuena@gmail.com
Julio 2014 miriam.balbuena@gmail.com
Julio 2014 miriam.balbuena@gmail.com
Julio 2014 miriam.balbuena@gmail.com
Mtodo: abrirArchivo
Clase: ProcesaImagen
Probamos el
cdigo
Ejercicio: Agrega 3 sliders ms a la ventana de controles
con sus etiquetas respectivas
brilloSlider
Valor mximo: 255
Valor mnimo: -255
Valor inicial: 0
Mtodo que ejecuta:
modificaBrillo (int value)
contrasteSlider
Valor mximo: 200
Valor mnimo: 0
Valor inicial: 100
modificaContraste (int value)
Julio 2014

miriam.balbuena@gmail.com
rotacionSlider
Valor mximo: 360
Valor mnimo: -360
Valor inicial: 0
Mtodo que ejecuta:
giraImagen (int
value)
Filtros de imagen
Julio 2014

miriam.balbuena@gmail.com
Filtros
Julio 2014 miriam.balbuena@gmail.com

Procesamientos sobre imgenes para
modificar su contenido.
Filtros en Java
Julio 2014 miriam.balbuena@gmail.com

Java ofrece objetos para filtrar imgenes
ConvolveOp. Calcula el valor de cada pixel en
base al valor de sus pixeles vecinos. Sirve para
desvanecer o hacer ms ntida la imagen.
AffineTransformOp. Mapea los pixeles a una
posicin diferente en el espacio. Sirve para
escalar o rotar una imagen
LookupOp. Remapea el color de los pixeles.
RescaleOp. Multiplica los canales de color por un
factor. Sirve para modificar el brillo y contraste.
Cmo funcionan los filtros en
Java?
Julio 2014 miriam.balbuena@gmail.com

Se crea una copia de la
imagen que sea susceptible
a recibir el filtro
Se crea imagen vaca que
recibir la salida del filtro.
Filtro
Pasamos la
imagen por el
filtro
La salida del
filtro la
guardamos en
la imagen vaca.
Agregamos algunos atributos al
ComponenteImagen
Julio 2014 miriam.balbuena@gmail.com

Mtodos para actualizar los
atributos.
Julio 2014 miriam.balbuena@gmail.com

Cada atributo tiene
distintos lmites.
El contraste tiene valores
flotantes de 0 a 2
El brillo valores enteros
entre 0 y 255
La escala de la imagen
ser de 1% al 200%
El giro es un valor entero
de -360 a 360.
Mtodo que crea una imagen nueva
Julio 2014 miriam.balbuena@gmail.com

No todas las imgenes tienen el formato adecuado para
recibir filtros.
Necesitamos crear nuevas imgenes varias veces.
Creamos el mtodo para hacerlo en ComponenteImagen.
Agregamos el filtro en el
ComponenteImagen
Julio 2014 miriam.balbuena@gmail.com

Creamos el
filtro
Imagen
temporal
Imagen de
salida
Aplicar el
filtro
Regresa la
imagen
procesada
Agregamos otro filtro a
ComponenteImagen
Julio 2014 miriam.balbuena@gmail.com

Julio 2014 miriam.balbuena@gmail.com

Agregamos otro filtro a
ComponenteImagen
Por ltimo, aplicamos los filtros antes de dibujar
la imagen en ComponenteImagen.
Julio 2014 miriam.balbuena@gmail.com

Dibujamos
temporal en lugar
de original
Julio 2014 miriam.balbuena@gmail.com

El cdigo siguiente guarda una imagen en disco.
Agrega un menuItem para guardar la imagen.
Se debe mostrar un dilogo para seleccionar el nombre
del archivo de salida. (JFileChooser)
Ejercicio: Guardar una imagen
try {
File archivo = new File("saved.png");
ImageIO.write(imagen, "png", archivo);
} catch (IOException e) {
...
}
Julio 2014 miriam.balbuena@gmail.com

Agregar el filtro para poner la imagen en escala de
grises.
Agrega un JCheckBox a los controles para aplicar el
filtro.
Usa su actionListener.
Puedes revisar su estado con el mtodo:
isSelected ();
Agrega el filtro a la secuencia de filtros del
ComponenteImagen
Ejercicio 1/2
Julio 2014 miriam.balbuena@gmail.com

La variable booleana gris determina si el filtro es aplicado o no.
El cdigo del filtro para escala de grises es el siguiente:
Ejercicio 2/2

Potrebbero piacerti anche