Image를 BufferedImage로 읽어 들이고, JFrame에 페인트하고, 원을 그려서 파일에 씁니다.JFrame에서 BufferedImage를 페인트하여 파일에 쓰기
다음 코드는 저장된 파일의 내용을 제외한 모든 코드를 처리합니다. 저장된 이미지에는 변경되지 않은 BufferedImage 만 포함됩니다. No Circles;) 나는 이미 코드를 변경하고 추가함으로써 그것을 이해하려고 손질했지만, 많은 도움이되지 못했다.
public class PaintImage extends Component {
BufferedImage img;
private int pngWidth, pngHeight;
public int getPngWidth() {
return pngWidth;
}
public int getPngHeight() {
return pngHeight;
}
public void paint(Graphics g) {
super.paint(g);
//g = img.createGraphics();
g.drawImage(img, 0, 0, 809, 1080, null);
g.drawOval(33, 33, 444, 444);
}
public PaintImage() {
try {
img = ImageIO.read(new File("C:\\karte_vorlage.png"));
pngWidth = img.getWidth();
pngHeight = img.getHeight();
} catch (IOException e) {
}
}
public void writeImage() {
try {
img.getGraphics();
ImageIO.write(img, "png", new File("C:\\save.png"));
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
의 주석 img.createGraphics g =(); 이미지가 손상됩니다.
도와주세요. 모두에게 미리 감사드립니다.
편집 : 1. paint (Graphics g) 메서드가 두 번 호출됩니다. 최소화 할 경우 다시 두 번 호출됩니다.
* ".. 클래스 PaintImage이 구성 요소는 확장"* 허 : 예를 들어, 클릭 버튼이 같은 방법을 실행할 때. 스윙 부분은 어디에 있습니까? 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –
저는이 예제에서 "paint (Graphics g)"라는 메서드가 두 번 호출된다는 것을 눈치 챘습니다. 최소화하고 최대화하면 두 번 다시 호출됩니다. 왜 두 번? 그것을 인식하는 System.out을 추가했습니다. – Kronos