Fun and Games(娱乐和游戏)提供了通过Java的Robot类捕获主屏幕设备的功能,并且可以将整个屏幕或者选定的一部分保存为jpeg文件。这篇文章以Swing应用的形式实现了屏幕捕获工具。

Java Fun and Games(Java娱乐和游戏)提供了通过Java的Robot类捕获主屏幕设备的功能,并且可以将整个屏幕或者选定的一部分保存为jpeg文件。

注意:现在你可以使用在线开发工具DevSquare编译和运行Java Fun and Games中提供的applet。DevSquare入门请阅读资源中提供的用户向导。

java.awt.Robot类为娱乐功能提供了一些有用的方法。其中一个包括了建立屏幕捕获工具的功能。Java Fun and Games给出了一个使用Robot捕获主屏幕设备内容的工具。

这一部分从我以前的几部分中分离出来了,因为它并不是集中在applet实现上。这篇文章以Swing应用的形式实现了屏幕捕获工具。从GUI观点介绍完这个应用之后,我将解释实现的关键部分。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接

作者:Jeff Friesen;mydeman

原文:

Matrix:

关键字:Java Robot;捕获屏幕

应用程序GUI

我的Capture程序提供了一个图形用户界面(GUI,Graphic User Interface),通过它你可以选择捕获图像的一部分,修剪图像到选择内容,以及将结果图像保存为jpeg文件。图1显示了包含一个捕获示例的Capture的GUI。

图 1. 红白相间的虚线所形成的矩形表示了当前选中的区域

Capture的GUI由菜单栏和显示捕获图像的可滚动窗口组成。如图1所示,选择矩形(通过拖拽鼠标)表示了捕获图形的一个矩形区域。

菜单栏提供了File和Capture菜单:

---File提供Save As…(另存为)和Exit(退出)菜单项,可以通过文件选择器保存当前捕获为一个jpeg文件,和退出Capture。尽管你可以直接选择这些菜单项,但是你会发现使用它们的快捷键Alt-S和Alt-X会更加方便。

---Capture提供Capture(捕获)和Crop(修剪)菜单项,可以捕获当前主屏幕设备的内容和修剪一个图像为选择矩形的内容。和File菜单项一样,这些菜单项也有它们自己的方便的快捷键:Capture(Alt-C)和Crop(Alt-K)。

应用实现

有三个源文件来描述Capture的GUI:Capture.java(启动应用程序和构造GUI)、ImageArea.java( 描述了一个用来显示捕获的内容的组件,你也可以在其中选择捕获的一部分或修剪捕获的内容)和ImageFileFilter.java(限制文件选择器的选择是文件夹和jpeg文件)。在这一部分下面,我从这些源文件中摘录了一些代码片断来说明Capture的工作过程。

机器人屏幕捕获

为了使用Robot类捕获屏幕,Capture必须先创建一个Robot对象。Capture类的public static void main(String [] args)方法尝试调用Robot的public Robot()构造函数来创建这个对象。如果创建成功,就会返回一个针对主屏幕设备坐标系的Robot引用。如果平台不支持低级控制(在没有屏幕设备的环境这是成立的),将会抛出java.awt.AWTException。如果平台不允许创建Robot对象就会抛出java.lang.SecurityException。但愿你不会再遇到其他异常。

假设Robot对象已被创建,main()调用Capture类的构造函数创建一个GUI。作为GUI创建的一部分,Capture通过调用dimScreenSize = Toolkit.getDefaultToolkit().getScreenSize();获得主屏幕设备的尺寸。因为用来显示屏幕捕获的内容的Robot的public BufferedImage createScreenCapture(Rectangle screenRect)方法,需要一个java.awt.Rectangle参数,所以构造函数通过rectScreenSize = new Rectangle(dimScreenSize);将java.awt.Dimension对象转换为一个Rectangle对象。当Capture菜单项的动作监听器被调用时,下面摘录的Capture.java片断就会调用createScreenCapture()。// Hide Capture's main window so that it does not appear in

// the screen capture.

setVisible (false);

// Perform the screen capture.

BufferedImage biScreen;

biScreen = robot.createScreenCapture (rectScreenSize);

// Show Capture's main window for continued user interaction.

setVisible (true);

// Update ImageArea component with the new image and adjust

// the scrollbars.

ia.setImage (biScreen);

jsp.getHorizontalScrollBar ().setValue (0);

jsp.getVerticalScrollBar ().setValue (0);

你不希望Capture的GUI遮住你想要捕获的任何内容。这就是为什么代码中隐藏Capture GUI优先级高于完成捕获。在获取了包含屏幕像素copy的java.awt.image.BufferedImage后,代码片断显示出GUI,并且通过图像区域组件显示出BufferedImage的内容。

[1]

【责编:Peng】

--------------------next---------------------

java robot 控制 不用用户 界面_编写一个基于Java Robot类的屏幕捕获工具相关推荐

  1. java购物商城系统开题报告_开题报告-基于Java的网上购物商城的设计与实现.doc...

    盐城师范学院 毕业设计开题报告 题 目: 基于Java的网上购物商城的设计与实现 姓 名: 学 院: 信息工程学院 专 业: 数字媒体技术 班 级: 12(1) 学 号: 指导教师: 职称: 讲师 2 ...

  2. java公交查询系统开题报告_毕业设计论文-基于JAVA的公交查询系统的设计与实现.doc...

    毕业设计论文-基于JAVA的公交查询系统的设计与实现.doc 还剩 42页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内 ...

  3. java在线题库开题报告_开题报告-基于java的在线考试系统设计

    毕业设计(论文)开题报告论文题目基于JSP的在线考试系统ONLINEEXAMINATIONSYSTEMBASEDONJSPONJSP学生姓名学号二级学院名称专业指导教师职称填表日期年月日一.选题的背景 ...

  4. 用java输入学生姓名查询成绩_编写一个Java程序,提示用户输入学生数量,学生姓名和他们的成绩,并按照成绩的降序打印学生姓名...

    importjava.util.Scanner;publicclassmyclass{publicstaticvoidmain(String[]args){Scannerinput=newScanne ...

  5. java猜数游戏图形界面_猜数游戏java实现代码

    本文实例为大家分享了java实现猜数游戏的具体代码,供大家参考,具体内容如下 有开始界面,可以设置范围,设置猜的次数 代码如下: public static void main(String[] ar ...

  6. java实现输出下一秒_编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一...

    using System; public class Programe { /// /// 输出时间加1s后的日期 /// /// /// /// /// /// /// private static ...

  7. 编写一个java程序 输出全部的希腊字母_编写一个Java应用程序,输出全部的希腊字母。...

    package 输出; public class App { public static void main(String args[]) { int s= 0, e= 0; char c= 'α', ...

  8. java在线问答系统_求一个基于JAVA的在线答疑系统程序

    /** * 计算 * * @author 3306 2017年5月9日 * @see * @since 1.0 */public class NumPicker { public static voi ...

  9. Java流程控制01 用户交互Scanner

    Java流程控制1 用户交互Scanner 1. Scanner对象 2. 测试代码 3. 比较 4. Scanner进阶使用 1. Scanner对象 1) 在Java中可以通过Scanner类来获 ...

最新文章

  1. PHP-密码学算法及其应用-对称密码算法
  2. sybase中游标的使用示例
  3. python爬虫代码提取图片中的文字_python识别图像并提取文字的实现方法
  4. Linux下修改Swap分区大小
  5. mysql用户管理+pymysql模块
  6. navicat循环执行上下两行相减sql语句_SQL太难?你离完全理解SQL就差这10步!
  7. hdu5800_dp
  8. php mysql统计去掉重复的,php - Mysql:根据最小数量删除重复记录 - 堆栈内存溢出...
  9. 【Android 10 源码】深入理解 MediaCodec configure
  10. 国内有哪些不错的CV(计算机视觉)团队?
  11. STM32利用AES加密数据、解密数据
  12. 深入理解Apache NIFI Run Duration
  13. linux安装seaweedfs
  14. 90952-27-5,Thiol-PEG4-alcohol含有羟基和巯基的交联剂
  15. 阿里数据分析师笔试记录
  16. linux取消上一个命令,Linux简介及最常用命令(简单易学,但能解决95%以上的问题)...
  17. Autoware1.14-摄像头目标检测YOLO-V3
  18. Memwatch简介
  19. 多人使用服务器,如何开个人账户?以及 个人账户如何操作服务器?
  20. 学术和编程:想一出是一出的艺术

热门文章

  1. 拼车日滴滴派单的那些事
  2. Spark _30_SparkStreaming算子操作Driver HA
  3. 为什么MySQL索引要使用 B+树,而不是其它树形结构?
  4. Flink 能够改写成 FlinkSQL的理论依据:命令式代码 vs 声明式代码
  5. Redis使用场景、Redis线程模型、Redis持久化 - 公开课笔记
  6. 汇编语言 DS段寄存器
  7. cxf环境搭建与第一个项目
  8. 17行代码AC_51Nod - 2133 排队接水(贪心)
  9. 给我往死里贪!——24行代码AC_今年暑假不AC HDU - 2037(贪心模板讲解)
  10. sql超低级用法(防遗忘)