본문 바로가기
자바/순수자바

[JAVA]자바 캡쳐 스크린샷 다양한상황 (듀얼모니터) capture #1

by #무한동력 2020. 5. 29.

자바로 캡쳐 상황이 굉장히 다양하고 자주쓰여서 정리해볼까합니다. 총 상황은 1,2,3,4로 진행될거같은데

이번에는 1,2만 정리를 해볼까합니다

추가로 더 필요한 다양한 캡쳐상황이 있다면 저도 연구해볼테니 많이 필요한게있으면 댓글달아주세요~

1. 일반캡쳐 
2. 듀얼모니터캡쳐
3. 웹 전체화면(스크롤까지 다 된크기) 캡쳐
4. 웹의 전체화면중 특정엘리먼트영역만 캡쳐

1.일반캡쳐

 

Robot robot = new Robot();
Rectangle area = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage bufferedImage = robot.createScreenCapture(area);
ImageIO.write(bufferedImage, "jpg", new File("D://a.jpg"));

일반캡쳐는 이와같이 Robot클래스를 이용하면 쉽게 얻어올수있습니다.

	    int x = 100;
	    int y = 100;
	    int width = 200;
	    int height = 200;
	    Rectangle area = new Rectangle(x, y, width, height);
	    BufferedImage bufferedImage = robot.createScreenCapture(area);
	    ImageIO.write(bufferedImage, "jpg", new File("D://a.jpg"));

이런식으로 하면 약간 응용해서 x,y시작위치로부터 width,height 의 범위만큼의 캡쳐만 얻어올수도있어요.

 

 

2.듀얼모니터캡쳐

public static void screenMultipleMonitors() {
	    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
	    GraphicsDevice[] gDevs = ge.getScreenDevices();
	    for (GraphicsDevice gDev : gDevs) {
	    	System.out.println(gDev);
	        DisplayMode mode = gDev.getDisplayMode();
	        Rectangle b = gDev.getDefaultConfiguration().getBounds();
	        System.out.println(gDev.getIDstring());
	        System.out.println("Min : (" + b.getMinX() + "," + b.getMinY() + ") ;Max : (" + b.getMaxX() + "," + b.getMaxY() + ")");
	        System.out.println("Width : " + mode.getWidth() + " ; Height :" + mode.getHeight());
	        try {
	            Robot robot = new Robot();
	            BufferedImage image = robot.createScreenCapture(new Rectangle((int) b.getMinX(),(int) b.getMinY(), (int) b.getWidth(), (int) b.getHeight()));
	            ImageIO.write(image, "png",new File("D://a_" + gDev.getIDstring().replace("\\", "") + ".png"));
	        } catch (AWTException e) {
	            e.printStackTrace();
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	    }
}

듀얼모니터의 경우는 해당 메소드를 그대로 옮겨서 붙이고 실행해보시면 D드라이브 하위에 a_모니터ID 형태로 

현재 인식되는 모니터의 개수만큼 각각의 캡쳐파일이 생성됩니다.

GraphicsEnvironment

GraphicsDevice

DisplayMode

등을 이용하면 캡쳐뿐이 아니라 현모니터의 속성정보도 얻어올수있습니다 다양하게 응용 할수있는상황이 많습니다.

sysout 부분확인하시면 조금 더 명확하게 아실수있습니다.

Win32GraphicsDevice[screen=0] 
\Display0 
Min : (0.0,0.0) ;Max : (1920.0,1080.0) 
Width : 1920 ; Height :1080

Win32GraphicsDevice[screen=1] 
\Display1 
Min : (1920.0,0.0) ;Max : (3840.0,1080.0) 
Width : 1920 ; Height :1080

저의경우에는 이런식으로 나오네요~

이번엔 여기까지!

 

이전에 웹 스크롤 다된 전체창크기 만큼 캡쳐 및 특정 div등 엘리먼트 영역만 캡쳐하는거

시도해보다가 애먹은기억이 많네요..

아래 기능은 다음편에 작성하도록 하겠습니다.

 

3.웹 전체화면(스크롤까지 다 된크기) 캡쳐 
4.웹의 전체화면중 특정엘리먼트영역만 캡쳐

댓글