Java nos permite mediante la clase BufferedImage manipular archivos de imagen byte por byte, por ejemplo para conseguir el efecto de "negativo" para una foto como hace el filtro de photoshop, corel o gimp.
Para este ejemplo, utilizaremos una foto de "rikku", un personaje de Final Fantasy, con un lindo par de ojos ;) para invertir la imagen, obtendremos todos los pixeles de la foto, de cada pixel se extraeran sus valores RGB (rojo, verde, azul) y se les restara 255,este nuevo valor, se insertara en una nueva imagen de tipo BufferedImag, esto se realizara para cada pixel de la image. Osea:
255 - Valor_R = Valor_R_invertido
255 - Valor_G = Valor_G_invertido
255 - Valor_B = Valor_B_invertido
La clase que hace todo esto es:
import java.awt.Color;
import java.awt.image.BufferedImage;
/**
* @web http://jc-mouse.blogspot.com/
* @author Mouse
*/
public class invertir {
private BufferedImage foto;
private int r,g,b;
private Color color;
public invertir(){}
/* Invierte los bytes de una imagen */
public void SetInvertir(BufferedImage f){
this.foto = f;
for(int i=0;i<foto.getWidth();i++){
for(int j=0;j<foto.getHeight();j++){
//se obtiene el color del pixel
color = new Color(foto.getRGB(i, j));
//se extraen los valores RGB
r = color.getRed();
g = color.getGreen();
b = color.getBlue();
//se coloca en la nueva imagen con los valores invertidos
foto.setRGB(i, j, new Color(255-r,255-g,255-b).getRGB());
}
}
}
public BufferedImage getFoto(){
return this.foto;
}
}
Esta simple clase, recibe un objeto de tipo BufferedImage y procesa byte por byte los colores de la imagen y las invierte, esta clase tambien retorna una imagen del tipo BufferedImage invertida.
Implementando esta clase y pasando como parametro la imagen anterior, obtenemos como resultado la imagen invertida.
6 comentarios:
gracias por todos estas enseñanzas que nos brindas en verdad eres grande en verdad lo eres.
gracias ha este blog he aprendido mucho.
si no es mucha molestia podrías poner algo de como insertar archivos swf en netbeans es que lo necesito para un proyecto muchas gracias.
hola estuve probando el codigo y efectivamente no tiene ningun error. sin embargo me gustaria saber en que momento se carga la imagen; he intentado de dos formas pero ninguna me funciona.
Porfavor expliquenme paso a paso, sucede que soy el tipo de personas que aprenden con manzanitas y peritas.
perrin aka este metodo recibe como parametro la imagen....
public void
SetInvertir(BufferedImage f){
tienes que crear un metodo aparte para cargar la imgen y enviarla al metodo
Que tal, sabes excelente tu exposición, el detalle es que he tenido problemas para cargar la imagen en un JFrame, si hay alguna manera de contactarte, te lo agradeceria, saludos.
Excelente! Unicamente necesite colocar un return this.imageActual que era el nombre de mi metodo, pero funciono perfecto! Muchas gracias!
Ayudando gente aun en 2020!
Publicar un comentario