读书笔记-第七课

前言

查看了相关文章然后一笔一笔打代码再调试成功出结果,
eguid的博客
不保证代码能够原封不动就能运行,
这里做一下记录。
ps:代码内容有改动,原版的可以看原作者的。

代码

package net.w2p.JCVStudio.zhiboStudy;


import org.bytedeco.javacv.CanvasFrame;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.awt.*;
import java.awt.image.BufferedImage;

/***
 * https://blog.csdn.net/eguid_1/article/details/64922443
 * java原生实现屏幕设备遍历和屏幕采集(捕获)等功能
 * **/
public class Lesson07 {

    Logger logger= LoggerFactory.getLogger("Lesson07");
    public void captureScreen(){

        //--获取屏幕大小
        Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
        //指定捕获的屏幕区域大小。这里使用全屏捕获。
        Rectangle rectangle=new Rectangle(screenSize);
        //--获取本地环境
        GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gs=ge.getScreenDevices();
        logger.info("找到了{}个屏幕设备。",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 (Exception ed){
                ed.printStackTrace();
                logger.info("打开第{}个屏幕设备时候失败,尝试打开第{}个的",index,index+1);
            }
        }
        if(ret==-1){
            logger.info("抱歉,找不到可用屏幕设备。");
            return;
        }
        logger.info("可用屏幕设备序号为:{}",ret);

        CanvasFrame frame=new CanvasFrame("屏幕录制测试");
        int width=800,height=600;
        frame.setBounds((int)(screenSize.getWidth()-width)/2,(int)(screenSize.getHeight()-height)/2
                ,width,height
        );
        frame.setCanvasSize(width,height);
        while (frame.isShowing()){
            // 从当前屏幕中读取的像素图像,该图像不包括鼠标光标
            logger.info("开始录制");
            BufferedImage image=robot.createScreenCapture(rectangle);
            frame.showImage(image);
            try{
                Thread.sleep(45);
            }
            catch (Exception ed){
                ed.printStackTrace();
            }

        }

        frame.dispose();

    }

    public static void main(String[] args) throws Exception{
        Lesson07 test=new Lesson07();
        test.captureScreen();
    }
}

发布了401 篇原创文章 · 获赞 256 · 访问量 271万+

猜你喜欢

转载自blog.csdn.net/cdnight/article/details/103887049