자바로 작은 이미지 처리를하려고합니다. 사용자는 버튼을 클릭하여 이미지를로드하고 이미지를 쉽게 수정할 수 있어야합니다. 이미지로드 및 표시는 문제가 없지만 이진 이미지를 만들 때 repaint() 메서드를 사용하면 화면에 검은 색 이미지가 표시됩니다. 문제는 repaint() - 메서드가 있다고 생각합니다. 검색 기능과 Google을 이미 사용했지만 코드에 무엇이 잘못되었는지 전혀 알 수 없습니다. 그건 내가 지금까지이 작업은 다음과 같습니다Repaint BufferedImage
public class ImageProcessing extends JFrame implements ActionListener {
private JPanel imagePanel;
private JPanel buttonPanel;
private JButton binaryButton;
private JButton loadButton;
private BufferedImage image;
private final String WINDOW_TITLE = "Image Processing";
public ImageProcessing() {
createWindow();
}
private void createWindow() {
this.setTitle(WINDOW_TITLE);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
imagePanel = new ImagePanel();
buttonPanel = new JPanel();
this.add(imagePanel, BorderLayout.CENTER);
loadButton = new JButton("Load image");
loadButton.addActionListener(this);
buttonPanel.add(loadButton);
this.add(buttonPanel, BorderLayout.SOUTH);
binaryButton = new JButton("binary");
binaryButton.addActionListener(this);
buttonPanel.add(binaryButton);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == this.loadButton) {
String filePath = getImageFile();
if (filePath != null) {
try {
image = ImageIO.read(new File(filePath));
// imageBackup = image;
} catch (IOException e1) {
e1.printStackTrace();
}
this.repaint();
}
} else if (e.getSource() == this.binaryButton) {
image = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
imagePanel = new ImagePanel();
this.repaint();
}
}
private String getImageFile() {
JFileChooser chooser = new JFileChooser();
int result = chooser.showOpenDialog(null);
File file = null;
if (result == JFileChooser.APPROVE_OPTION) {
file = chooser.getSelectedFile();
return file.getPath();
} else
return null;
}
class ImagePanel extends JPanel {
public void paint(Graphics g) {
g.drawImage(image, 0, 0, this);
}
}
}
난 당신이 나를 도와 내가 잘못 뭘하는지 설명 할 수 있기를 바랍니다. 미리 감사드립니다.
진 버튼을 누른 후, ImagePanel의 새로운 인스턴스 변수 'imagePanel' 할당된다. 그러나이 새로운 ImagePanel은 JFrame에 추가되지 않습니다. 이전 ImagePanel은 JPanel에 남아 있습니다. – gogognome
'BufferedImage.TYPE_BYTE_BINARY' 왜'image.getType()'과 반대되는 바이너리입니까? –