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
