Ultimamente he estado jugando con 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
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 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(); }
Efecto Sepia
Ultimamente he estado jugando con 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
Imagen
ver imagen
Codigo
Clase Principal
package clases;
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 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();
}
}