`

添加屏幕截图的一个辅助类ScreenDumpHelper

阅读更多
package cn.iamsese.prj.db.helper;

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;

import javax.imageio.ImageIO;

interface ImageType {
	public final static String JPG = "JPG" ;
	public final static String PNG = "PNG" ;
	public final static String GIF = "GIF" ;
}

/**
 * 屏幕截取 类 
 * 参考 http://www.iteye.com/topic/289052 实现
 * cn.iamsese.prj.db.helper
 * Author: vb2005xu [JAVA菜鸟]
 */
public class ScreenDumpHelper {
	/** ScreenDumpHelper 静态对象*/
	private static ScreenDumpHelper defaultScreenDumpHelper ;
	/**
	 * 返回 ScreenDumpHelper 类的 单态实例
	 * @return ScreenDumpHelper
	 */
	public static ScreenDumpHelper getDefaultScreenDumpHelper(){
		if (defaultScreenDumpHelper == null)
			return new ScreenDumpHelper();
		return defaultScreenDumpHelper ;
	} 
	/**
	 * 构造函数中设置 截屏区域的默认值 -- 缺省为全屏
	 */
	public ScreenDumpHelper(){
		Dimension dime = Toolkit.getDefaultToolkit().getScreenSize();
		this.setScreenArea(new Rectangle(dime));
	}
	
	/**
	 *设置截屏的范围
	 */
	private Rectangle screenArea ;
	public Rectangle getScreenArea() {
		return this.screenArea;
	}
	public void setScreenArea(Rectangle screenArea) {
		this.screenArea = screenArea;
	}
	public void setScreenArea(int x, int y , int width, int height) {
		this.screenArea = new Rectangle(x,y,width,height);
	}
	
	/**
	 * 返回一个 BufferedImage
	 * @return
	 * @throws AWTException
	 */
	private BufferedImage getBufferedImage() throws AWTException{
		BufferedImage imgBuf = null ;;
		imgBuf = ( new Robot() ).createScreenCapture(this.getScreenArea());		
		return imgBuf ;
	}
	
	/**
	 * 将 图像数据写到 输出流中去,方便再处理
	 * @param fileFormat
	 * @param output
	 * @return
	 */
	public boolean saveToOutputStream(String fileFormat,OutputStream output){
		try {
			ImageIO.write(this.getBufferedImage(), fileFormat, output) ;
		} catch (AWTException e) {
			return false ;
			//e.printStackTrace();
		} catch (IOException e) {
			return false ;
			//e.printStackTrace();
		}
		return true ;
	}
	
	/**
	 * 根据文件格式 返回随机文件名称
	 * @param fileFormat
	 * @return
	 */
	public String getRandomFileName(String fileFormat){
		return "screenDump_" + (new Date()).getTime() + "." + fileFormat ;
	}
	
	/**
	 * 抓取 指定区域的截图 到指定格式的文件中 -- 这个函数是核心,所有的都是围绕它来展开的
	 *  * 图片的编码并不是以后缀名来判断: 
	 * 比如s.jpg 如果其采用png编码,那么这个图片就是png格式的	 
	 * @param fileName
	 * @param fileFormat
	 * @return boolean
	 */
	public boolean saveToFile(String fileName,String fileFormat){
		if (fileName == null)
			fileName = getRandomFileName(fileFormat) ;		
		try {
			FileOutputStream fos = new FileOutputStream(fileName);
			this.saveToOutputStream(fileFormat, fos);
		} catch (FileNotFoundException e) {
			System.out.println("非常规文件或不能创建抑或覆盖此文件: " + fileName);
			e.printStackTrace();
		}
		return true ;
	}
	
	/**
	 * 抓取 指定 Rectangle 区域的截图 到指定格式的文件中
	 * @param fileName
	 * @param fileFormat
	 * @param screenArea
	 * @return
	 */
	public boolean saveToFile(String fileName,String fileFormat,Rectangle screenArea){
		this.setScreenArea(screenArea);
		return this.saveToFile(fileName,fileFormat);
	}
	/**
	 * 抓取 指定区域的截图 到指定格式的文件中
	 * @param fileName
	 * @param fileFormat
	 * @param x
	 * @param y
	 * @param width
	 * @param height
	 */
	public boolean saveToFile(String fileName,String fileFormat,int x, int y , int width, int height){
		this.setScreenArea(x,y,width,height);
		return this.saveToFile(fileName, fileFormat);
	}	
	
	/**
	 * 将截图使用 JPG 编码
	 * @param fileName
	 */
	public void saveToJPG(String fileName){
		this.saveToFile(fileName, ImageType.JPG);
	}
	public void saveToJPG(String fileName,Rectangle screenArea){
		this.saveToFile(fileName, ImageType.JPG,screenArea);
	}
	public void saveToJPG(String fileName,int x, int y , int width, int height){
		this.saveToFile(fileName, ImageType.JPG,x,y,width,height);
	}
	
	/**
	 * 将截图使用 PNG 编码
	 * @param fileName
	 */
	public void saveToPNG(String fileName){
		this.saveToFile(fileName, ImageType.PNG);
	}
	public void saveToPNG(String fileName,Rectangle screenArea){
		this.saveToFile(fileName, ImageType.PNG,screenArea);
	}
	public void saveToPNG(String fileName,int x, int y , int width, int height){
		this.saveToFile(fileName, ImageType.PNG,x,y,width,height);
	}
	
	public void saveToGIF(String fileName){
		throw new UnsupportedOperationException("不支持保存到GIF文件");
		//this.saveToFile(fileName, ImageType.GIF);
	}	


	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		for(int i = 0 ; i < 5 ; i ++)
			ScreenDumpHelper.getDefaultScreenDumpHelper().saveToJPG(null,i*150,i*150,400,300);
	}
	
	
	

}

 

 

截取图片如下:

  • 大小: 27.6 KB
  • 大小: 25.4 KB
  • 大小: 29.2 KB
  • 大小: 26.3 KB
  • 大小: 14 KB
2
1
分享到:
评论
1 楼 lwyx2000 2009-03-01  
感谢我正好想弄个玩下`

相关推荐

    node-v7.2.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v6.14.2-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    rbac权限控制框架:1.支持角色继承,数据组,行为组.zip

    rbac权限控制框架:1.支持角色继承,数据组,行为组.zip abac,rbac权限控制框架 支持角色继承,数据组,行为组 支持动态角色和静态角色 usage 用户与角色需要额外维护 权限控制规则默认驻留内存, 可自定义RuleRepository实现 角色继承关系默认驻留内存, 可自定义RoleHierarchyRepository实现 数据组关系默认驻留内存, 可自定义DataGroupRepository实现 行为组关系默认驻留内存, 可自定义ActionGroupRepository实现 若使用动态角色需要实现DynamicRoleDefiner

    utlog.sqlite

    utlog.sqlite

    node-v0.12.8-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.2.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.6.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.7.4-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    xia0FridaScript-master.zip

    xia0FridaScript-master.zip

    煤炭地质勘查钻孔质量标准MTT1042-2007.pdf

    煤炭地质勘查钻孔质量标准MTT1042-2007.pdf

    149煤矿生产安全事故现场处置方案.pdf

    149煤矿生产安全事故现场处置方案.pdf

    信息办公个人求职管理系统-jobgljsp.rar

    javaweb登录注册页面,[信息办公]个人求职管理系统,jsp开发源码。

    煤矿重要用途钢丝绳.PDF

    煤矿重要用途钢丝绳.PDF

    2023-06-30-东方财富证券-华电重工-深度研究:乘氢能之风,新能源巨轮远航.pdf

    2023-06-30-东方财富证券-华电重工-深度研究:乘氢能之风,新能源巨轮远航

    node-v5.4.1-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    超详细Python教程,适合零基础小白学习

    超详细Python教程,包含Python数据结构、对象、模块、迭代器等等超多内容 Django框架教程

    node-v7.9.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    微信小程序考试系统.zip

    微信小程序考试系统.zip 微信小程序考试系统 1.安装微信web开发工具 2.运行微信web开发工具,点击小程序项目,选择新建(+),选择压缩包下的examSystem-exam1.0文件夹, 填写AppID(AppID:wx2fd6fcc3d4a9a059),定义项目名称,导入项目 3.文件目录说明 app.json 当前小程序的全局配置,包含了小程序所有页面路径 .wxml wxml文件定义小程序页面布局 .js js文件定义用户相关操作事件(交互逻辑) .wxss wxss文件定义当前小程序页面的局部页面样式 具体页面路径 pages/index/index:系统登录页面 pages/grid/index:登录成功后系统菜单页 pages/answer/answer:考试中心答题页面 pages/wrongQuestion/wrongQuestion:错题集页面 pages/logs/logs:日志文件 image:系统需用到图片 dist:UI框架需要icon、js 4.登录账号 姓名:admin 部门:001

    node-v7.10.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于AMDavaScript模块加载器迄今为止对AMD理解最好的实现

    功能概述 100% 支持 AMD 规格。支持模块化开发。定义模块后,无需维护依赖模块即可使用模块,只需编写一个依赖,lodJS 会自动负责依赖注入。 特性 模块化开发支持 异步加载 依赖注入 灵活的自定义功能 兼容性 Safari 浏览器 6+ (Mac) iOS 5+ Safari浏览器 Chrome 23+(Windows、Mac、Android、iOS、Linux、Chrome 操作系统) Firefox 4+(Windows、Mac、Android、Linux、Firefox 操作系统) Internet Explorer 6+(Windows、Windows Phone) Opera 10+(Windows、Linux、Android

Global site tag (gtag.js) - Google Analytics