2017-04-06 9 views

답변

4

다른 시점에서 패널의 BufferedImage을 생성 한 다음 이미지를 파일에 저장할 수 있습니다.

이의 기본 논리는 다음과 같습니다

BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB); 
Graphics2D g2d = image.createGraphics(); 
panel.print(g2d); 
g2d.dispose(); 
ImageIO.write(...); 

체크 아웃 위의 기능을 구현하는 편리한 메소드에 대한 Screen Image 클래스입니다.

물론 이것은 각 프레임에 완전히 새로운 이미지가 필요하기 때문에 그리 효율적이지 않습니다.

+0

더블 버퍼링을 포함하지 않기 때문에'paint' 대신'print' 또는'printAll'을 사용하는 것이 더 좋을 것입니다. 그리고 구성 요소가 화면에 구현되지 않으면 예외를 던지지 않습니다.) – MadProgrammer

+0

@MadProgrammer는 이중 버퍼를 사용하지 않는 것이 좋습니다. (코드 변경). 페인팅 문제가 있지만 구성 요소가 실현되지 않으면 Exception (플랫폼 차이점)에 문제가 없었습니다. 기본적으로 구성 요소의 크기가 (0, 0)이므로 페인트 할 것이 없습니다. ScreenImage 클래스는 레이아웃 코드를 호출하여 크기를 처리합니다. – camickr

+0

나는'NullPointerException'을 통해 그것을 가졌지 만, 부모에게 전혀 추가되지 않았기 때문에 아마도 이중 버퍼를 설정하는 데 문제가 있었을 것입니다. 이 경우에'print'와'printAll'가 더 안정적이라는 것을 알았습니다 : P – MadProgrammer