[JAVA] 멀티 스크린(다중 디스플레이)을 고려한 스크린샷 찍기
자바에서 현재 화면(스크린샷)을 BufferedImage 객체로 만드는 코드는 다음과 같다.
|
private static BufferedImage getScreenShotImage() { BufferedImage screenImgObj = null; try {
// 해상도 구하기 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
// 스크린샷 찍기 Robot robot = new Robot(); screenImgObj = robot.createScreenCapture(new Rectangle(0, 0, (int) screenSize.getWidth(), (int) screenSize.getHeight()));
// 스크린샷 파일화 // ImageIO.write(screenImgObj, “bmp”, new File(“c:/test/screenshot.bmp”));
} catch (Exception e) { e.printStackTrace(); } return screenImgObj; }
|
하지만 위 코드는 모니터가 1개일 때만 잘 작동한다.
모니터가 2개 이상(멀티 스크린, 다중 디스플레이)일 경우 스크린샷을 찍는 코드는 다음과 같다.
화면 하나는 BufferedImage 1개가 되므로 n개의 BufferedImage 가 나온다.
|
private static ArrayList<BufferedImage> getScreenShotImageForMultiScreen() {
ArrayList<BufferedImage> screenImgObjList = new ArrayList<BufferedImage>(); BufferedImage screenImgObj = null; GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for (GraphicsDevice curGs : gs) { GraphicsConfiguration[] gc = curGs.getConfigurations(); for (GraphicsConfiguration curGc : gc) {
// 해상도 구하기 Rectangle bounds = curGc.getBounds();
try { // 스크린샷 찍기 Robot robot = new Robot(); screenImgObj = robot.createScreenCapture(new Rectangle((int) bounds.getX(), (int) bounds.getY(), (int) bounds.getWidth(), (int) bounds.getHeight()));
if (screenImgObj != null) { screenImgObjList.add(screenImgObj); }
} catch (Exception e) { e.printStackTrace(); } } }
return screenImgObjList; }
|