Java를 사용하여 스크린 샷 찍기

1. 소개

이 튜토리얼에서는 Java로 스크린 샷을 찍는 몇 가지 다른 방법을 살펴 보겠습니다.

2. 로봇 으로 스크린 샷 찍기

첫 번째 예에서는 메인 화면의 스크린 샷을 찍을 것입니다.

이를 위해 Robot 클래스 의 createScreenCapture () 메서드를 사용합니다 . 그것은 소요 사각형을 스크린 샷 반환 A에 대한 경계를 설정하는 매개 변수로 되는 BufferedImage 객체. 의 BufferedImage는 더 이미지 파일을 만들 수 있습니다 :

@Test public void givenMainScreen_whenTakeScreenshot_thenSaveToFile() throws Exception { Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); BufferedImage capture = new Robot().createScreenCapture(screenRect); File imageFile = new File("single-screen.bmp"); ImageIO.write(capture, "bmp", imageFile ); assertTrue(imageFile .exists()); }

화면의 크기는 getScreenSize () 메서드를 사용하여 Toolkit 클래스를 통해 액세스 할 수 있습니다 . 여러 화면이있는 시스템에서는 기본적으로 기본 디스플레이가 사용됩니다.

화면을 BufferedImage 로 캡처 한 후 ImageIO.write ()로 파일에 쓸 수 있습니다 . 이렇게하려면 두 개의 추가 매개 변수가 필요합니다. 이미지 형식 및 이미지 파일 자체. 이 예에서는 . bmp 형식이지만. png, .jpg 또는 .gif 도 사용할 수 있습니다.

3. 여러 화면의 스크린 샷 찍기

한 번에 여러 디스플레이의 스크린 샷을 찍을 수도 있습니다 . 이전 예제와 마찬가지로 Robot 클래스 의 createScreenCapture () 메서드를 사용할 수 있습니다 . 그러나 이번에는 스크린 샷의 경계가 필요한 모든 화면을 포함해야합니다.

모든 디스플레이를 얻기 위해 GraphicsEnvironment 클래스와 getScreenDevices () 메서드를 사용합니다.

다음으로 각 개별 화면의 경계를 가져 와서 모든 화면에 맞는 Rectangle 을 만들 것입니다.

@Test public void givenMultipleScreens_whenTakeScreenshot_thenSaveToFile() throws Exception { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] screens = ge.getScreenDevices(); Rectangle allScreenBounds = new Rectangle(); for (GraphicsDevice screen : screens) { Rectangle screenBounds = screen.getDefaultConfiguration().getBounds(); allScreenBounds.width += screenBounds.width; allScreenBounds.height = Math.max(allScreenBounds.height, screenBounds.height); } BufferedImage capture = new Robot().createScreenCapture(allScreenBounds); File imageFile = new File("all-screens.bmp"); ImageIO.write(capture, "bmp", imageFile); assertTrue(imageFile.exists()); }

디스플레이를 반복하는 동안 항상 너비를 합산하고 화면이 수평으로 연결되므로 최대 높이를 하나만 선택합니다.

계속해서 스크린 샷 이미지를 저장해야합니다. 이전 예제에서와 같이 ImageIO.write () 메서드를 사용할 수 있습니다 .

4. 주어진 GUI 컴포넌트의 스크린 샷 찍기

주어진 UI 구성 요소의 스크린 샷을 찍을 수도 있습니다.

모든 구성 요소가 크기와 위치를 인식 하므로 getBounds () 메서드를 통해 차원에 쉽게 액세스 할 수 있습니다 .

이 경우 Robot API 를 사용하지 않을 것 입니다. 대신 BufferedImage에 콘텐츠를 직접 그릴 Component 클래스 의 paint () 메서드 를 사용합니다 .

@Test public void givenComponent_whenTakeScreenshot_thenSaveToFile(Component component) throws Exception { Rectangle componentRect = component.getBounds(); BufferedImage bufferedImage = new BufferedImage(componentRect.width, componentRect.height, BufferedImage.TYPE_INT_ARGB); component.paint(bufferedImage.getGraphics()); File imageFile = new File("component-screenshot.bmp"); ImageIO.write(bufferedImage, "bmp", imageFile ); assertTrue(imageFile.exists()); }

컴포넌트의 바운드를 얻은 후 BufferedImage 를 만들어야합니다 . 이를 위해 너비, 높이 및 이미지 유형이 필요합니다. 이 경우 8 비트 컬러 이미지를 참조 하는 BufferedImage.TYPE_INT_ARGB 를 사용 합니다.

그런 다음 페인트 () 메서드 를 호출하여 BufferedImage 를 채우고 이전 예제에서와 마찬가지로 ImageIO.write () 메서드 를 사용하여 파일에 저장합니다 .

5. 결론

이 자습서에서는 Java를 사용하여 스크린 샷을 찍는 방법을 여러 가지 배웠습니다.

항상 그렇듯이이 자습서의 모든 예제가 포함 된 소스 코드는 GitHub에서 사용할 수 있습니다.