Aplicar Efecto Sepia
Aplicar Efecto Sepia
Hace ya unos dias que he estado jugando con los filtros y efectos sobre imagenes desde java, en la mayoria de los casos manipulando los valores RGB de cada pixel, espero les sea de interes, pueden ver mas de 15 filtros que he publicado en My Java Zone
Imagenes
Codigo
Clase Principal
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
public class Principal extends JFrame {
ImageIcon imagenSeleccionada;
JLabel limgOriginal, limgGrises;
JTextField txtNombreImg;
BufferedImage imgsel;
public Principal() {
JPanel pprincipal = new JPanel();
pprincipal.setLayout(new BorderLayout());
JPanel ptitulo = new JPanel();
JLabel ltitulo = new JLabel("Sepia");
ptitulo.add(ltitulo);
JPanel pimagenes = new JPanel(new BorderLayout());
JSplitPane split = new JSplitPane();
split.setResizeWeight(0.5);
JPanel pimagenoriginal = new JPanel();
limgOriginal = new JLabel();
pimagenoriginal.add(limgOriginal);
JScrollPane spimgoriginal = new JScrollPane(pimagenoriginal);
split.setLeftComponent(spimgoriginal);
JPanel pimagengrises = new JPanel();
limgGrises = new JLabel();
pimagengrises.add(limgGrises);
JScrollPane spimggrises = new JScrollPane(pimagengrises);
split.setRightComponent(spimggrises);
pimagenes.add(split);
JPanel pselector = new JPanel();
txtNombreImg = new JTextField(30);
JButton btn = new JButton("Seleccionar");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
JFileChooser selector = new JFileChooser();
int r = selector.showOpenDialog(null);
if (r == JFileChooser.APPROVE_OPTION) {
try {
imgsel = ImageIO.read(selector.getSelectedFile());
imagenSeleccionada = new ImageIcon(imgsel);
limgOriginal.setIcon(imagenSeleccionada);
limgGrises.setIcon(new ImageIcon(aplicarFiltro()));
txtNombreImg.setText(selector.getSelectedFile()
.getName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
pselector.add(txtNombreImg);
pselector.add(btn);
pprincipal.add(ptitulo, BorderLayout.NORTH);
pprincipal.add(pimagenes, BorderLayout.CENTER);
pprincipal.add(pselector, BorderLayout.SOUTH);
add(pprincipal);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(0, 0, 800, 600);
setLocationRelativeTo(null);
}
public BufferedImage aplicarFiltro() {
BufferedImage bi = null;
if(imgsel != null ) {
bi = new BufferedImage(imgsel.getWidth(), imgsel.getHeight(),
imgsel.getType());
Color colorImagen = null; int red = 0, green = 0, blue = 0;
for(int i = 0; i < imgsel.getWidth(); i++) {
for (int j = 1; j < (imgsel.getHeight()-1); j++) {
colorImagen = new Color(imgsel.getRGB(i, j));
try {
red = (int)(colorImagen.getRed() * 0.393 +
colorImagen.getGreen() * 0.769 + colorImagen.getBlue() * 0.189);
green = (int)(colorImagen.getRed() * 0.349 +
colorImagen.getGreen() * 0.686 + colorImagen.getBlue() * 0.168);
blue = (int)(colorImagen.getRed() * 0.272 +
colorImagen.getGreen() * 0.534 + colorImagen.getBlue() * 0.131);
colorImagen = new Color((red>255)?255:red,
(green>255)?255:green, (blue>255)?255:blue);
} catch (Exception e) {}
bi.setRGB(i, j, colorImagen.getRGB());
}
}
}
return bi;
}
public static void main(String[] args) {
new Principal();
}
}
- roger1345's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Esta buena la aportación
Esta buena la aportación, imagino que algo asi se puede usar para aplicar la famosa pantalla azul de efectos especiales.