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