Bom dia senhores,
Seguinte, estava tentando ajudar uma amiga aqui no serviço, mas não estou dando conta.
A gente criou um JFrame, que pega uma imagem, e tem 3 botoes, cada um deles, satura a imagem em R, G ou B respectivamente. Beleza, na primeira clicada, funfa, na segunda, o JPanel fica preto.
Eu achando lógico criei 2 buffers de imagem na classe, alterei 1, e qndo fosse fazer a alteração ele pega o buffer intacto e atribuia para o alterado. Mas continuou dando o mesmo problema.
Vou colar o código, alguma sugestão do que deve ser feito? Eu consegui fazendo uma gambiarra, mas eu gostaria de uma maneira menos porca.
A maneira porca, foi definir o FileDialog como global, e reatribuir o jPanel2 a cada clique de botão. Mas tenho certeza que deve haver uma maneira melhor de fazer isso.
Obrigado pela atenção, código abaixo. JFRAME (só coloquei o fundamental)private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
fd.setVisible(true);
if (fd.getFile() != null) {
try {
((Imagem) jPanel1).atribuiImagem(ImageIO.read(new File(fd.getDirectory() + fd.getFile())));
((Imagem) jPanel2).atribuiImagem(ImageIO.read(new File(fd.getDirectory() + fd.getFile())));
image3 = ImageIO.read(new File(fd.getDirectory() + fd.getFile()));
} catch (IOException ex) {
Logger.getLogger(exucutor.class.getName()).log(Level.SEVERE, null, ex);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
((Imagem) jPanel2).atribuiImagem(image3);
((Imagem)jPanel2).escala_red();
jPanel2.repaint();
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
((Imagem) jPanel2).atribuiImagem(image3);
((Imagem)jPanel2).escala_blue();
jPanel2.repaint();
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
((Imagem) jPanel2).atribuiImagem(image3);
((Imagem)jPanel2).escala_green();
jPanel2.repaint();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new exucutor().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
// End of variables declaration
}
public class Imagem extends JPanel{
private BufferedImage figura, figura2;
public Imagem () {
super();
}
@Override
protected void paintComponent (Graphics g) {
super.paintComponents(g);
g.drawImage(figura, 0, 0, null);
}
public void atribuiImagem (BufferedImage _buffer) {
figura = _buffer;
figura2 = _buffer;
repaint();
}
public void escala_red() {
figura = figura2;
int x, y, r, cinza;
for (x=0; x<figura.getWidth(); x++)
for (y=0; y<figura.getHeight(); y++) {
Color color = new Color (figura.getRGB(x, y));
r = (int) color.getRed();
figura.setRGB(x, y, (new Color (r, 0, 0).getRGB()));
}
}
public void escala_green() {
figura = figura2;
int x, y, g;
for (x=0; x<figura.getWidth(); x++)
for (y=0; y<figura.getHeight(); y++) {
Color color = new Color (figura.getRGB(x, y));
g = (int) color.getGreen();
figura.setRGB(x, y, (new Color (0, g, 0).getRGB()));
}
}
public void escala_blue() {
figura = figura2;
int x, y, b;
for (x=0; x<figura.getWidth(); x++)
for (y=0; y<figura.getHeight(); y++) {
Color color = new Color (figura.getRGB(x, y));
b = (int) color.getBlue();
figura.setRGB(x, y, (new Color (0, 0, b).getRGB()));
}
}

foi pq achei que este topico iria morrer, como um outro que fiz a algum tempo.