java原生實現屏幕設備遍歷和屏幕採集(捕獲)等功能

  • 2019 年 11 月 1 日
  • 筆記

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/eguid_1/article/details/64922443

前言:本章中屏幕捕獲使用原生java實現,屏幕圖像顯示採用javacv1.3的CanvasFrame一、實現的功能

1、屏幕設備遍歷

2、本地屏幕圖像採集(也叫屏幕圖像捕獲)

3、播放本地圖像(採用javacv)

4、關閉播放窗口即停止圖像採集

二、實現代碼

	public static void captureScreen(){  		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();// 獲取當前屏幕大小  		Rectangle rectangle = new Rectangle(screenSize);// 指定捕獲屏幕區域大小,這裡使用全屏捕獲  		//做好自己!--eguid,eguid的博客是:blog.csdn.net/eguid_1  		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();//本地環境  		GraphicsDevice[] gs = ge.getScreenDevices();//獲取本地屏幕設備列表  		System.err.println("eguid溫馨提示,找到"+gs.length+"個屏幕設備");  		Robot robot=null;  		int ret=-1;  		for(int index=0;index<10;index++){  			GraphicsDevice g=gs[index];  			try {  				robot= new Robot(g);  				BufferedImage img=robot.createScreenCapture(rectangle);  				if(img!=null&&img.getWidth()>1){  					ret=index;  					break;  				}  			} catch (AWTException e) {  				System.err.println("打開第"+index+"個屏幕設備失敗,嘗試打開第"+(index+1)+"個屏幕設備");  			}  		}  		System.err.println("打開的屏幕序號:"+ret);  		CanvasFrame frame = new CanvasFrame("eguid屏幕錄製");// javacv提供的圖像展現窗口  		int width = 800;  		int height = 600;  		frame.setBounds((int) (screenSize.getWidth() - width) / 2, (int) (screenSize.getHeight() - height) / 2, width,  				height);// 窗口居中  		frame.setCanvasSize(width, height);// 設置CanvasFrame窗口大小  		while (frame.isShowing()) {  			BufferedImage image = robot.createScreenCapture(rectangle);// 從當前屏幕中讀取的像素圖像,該圖像不包括鼠標光標  			frame.showImage(image);    			try {  				Thread.sleep(45);  			} catch (InterruptedException e) {  				// TODO Auto-generated catch block  				e.printStackTrace();  			}  		}  		frame.dispose();  	}

三、測試結果

找到1個屏幕設備 打開的屏幕:0