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

时间:2022-12-23 09:53:37

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

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

java原生实现屏幕设备遍历和屏幕采集(捕获)等功能的更多相关文章

  1. Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类

    Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. package com.qiyu.ddb.util; import android.anno ...

  2. 单击Android设备后退键,主屏幕键以及旋转屏幕如何影响Activity的生命周期

    单击设备的后退键,相当于通知Android系统“我已完成activity的使用,现在不需要它了.”接到指令后,系统立即销毁了activity.即调用onPause()->onStop()-&gt ...

  3. 转 如何在IOS设备中去掉屏幕上的status bar

    引入如何在IOS设备中去掉屏幕上的status bar,即:不显示设备上方的[网络.时间.电池??]条?操作方法一:在-info.list项目文件中,加上“Status bar is initiall ...

  4. WPF 获取元素(Visual)相对于屏幕设备的缩放比例,可用于清晰显示图片

    原文:WPF 获取元素(Visual)相对于屏幕设备的缩放比例,可用于清晰显示图片 我们知道,在 WPF 中的坐标单位不是屏幕像素单位,所以如果需要知道某个控件的像素尺寸,以便做一些与屏幕像素尺寸相关 ...

  5. android 学习随笔二十七(JNI:Java Native Interface&comma;JAVA原生接口 )

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...

  6. 使用Java原生代理实现数据注入

    本文由博主原创,转载请注明出处 完整源码下载地址 https://github.com/MatrixSeven/JavaAOP 上一篇,咱们说了使用Java原生代理实现AOP的简单例子,然么就不得不说 ...

  7. Java 原生日志 java&period;util&period;logging

    简介 Java 中的 Logging API 让 Java 应用可以记录不同级别的信息,它在debug过程中非常有用,如果系统因为各种各样的原因而崩溃,崩溃原因可以在日志中清晰地追溯,下面让我们来看看 ...

  8. 使用Java原生代理实现AOP

    ### 本文由博主柒.原创,转载请注明出处 ### 完整源码下载地址 [https://github.com/MatrixSeven/JavaAOP](https://github.com/Matri ...

  9. 【Java】Java原生的序列化和反序列化

    写一个Java原生的序列化和反序列化的DEMO. 需序列化的类: package com.nicchagil.nativeserialize; import java.io.Serializable; ...

随机推荐

  1. 《oracle每天一练》Merge Into 语句代替Insert&sol;Update在Oracle中的应用实战

    转载自窃破天道 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也 ...

  2. bootstrap学习--什么是bootstrap

    2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK ...

  3. eclipse不能识别虚拟机的问题

    1.输入cmd进入dos界面,进入android-sdk-windows\platform-tools目录,执行下面命令启动adb start-server出现下面错误* daemon not run ...

  4. WCF:System&period;Security&period;Cryptography&period;CryptographicException&colon; 密钥集不存在

    WCF使用IIS部署时,使用x509证书验证,在创建证书并正确配置程序后,访问出现错误提示: System.Security.Cryptography.CryptographicException: ...

  5. &lbrack;cocos2d-x&rsqb;屏幕自适应解决的方法

    近期在写一个项目,要求pc,ipad,andriod平台上都能够执行,所以选择用cocos2d-x来开发. 我们的资源大小是1024*768的,在pc上和苹果上都是没有问题的,但是到了andriod上 ...

  6. jupyter 安装、配置及使用笔记

    jupyter 安装.配置及使用笔记 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-2-22 絮絮叨叨篇的前言 早在大 ...

  7. 每天学点SpringCloud(十一):Hystrix仪表盘

    在SpringCloud学习系列博客第六篇文章中,我们已经学习了Hystrix的使用,但是那篇文章中有一点遗漏没有讲,那就是Hystrix Dashboard ,它可以实时的监控Hystrix的运行情 ...

  8. BZOJ3236&colon;&lbrack;AHOI2013&rsqb;作业&lpar;莫队&comma;分块&rpar;

    Description Input Output Sample Input 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 Sample Output 2 2 1 ...

  9. A Connection to the remote computer could not be established

    Go to device manager: uninstall WAN Miniport (IP), Wan Miniport(IPv6) and Wan Miniport (PPTP). Refre ...

  10. linux编码问题小节

    今天又碰到了难缠的python编码问题,首先主要还是linux操作系统中的编码问题. 无论怎么样,我都没办法在linux的vim中利用中文输入法打出中文? vim中的set encoding,set ...