[原]java原生实现屏幕设备遍历和屏幕采集(捕获)等功能

Author Avatar
eguid 3月 22, 2017
  • 在其它设备中阅读本文章

前言:本章中屏幕捕获使用原生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

<div>
    作者:eguid_1 发表于 2017/03/22 17:37:08 [原文链接](https://blog.csdn.net/eguid_1/article/details/64922443) https://blog.csdn.net/eguid_1/article/details/64922443                    </div>
<div>
    阅读:2481                     </div>

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本文链接:https://blog.eguid.cc/2017/03/22/原-java原生实现屏幕设备遍历和屏幕采集(捕获)等功能/