­

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