`

添加屏幕截图的一个辅助类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  
感谢我正好想弄个玩下`

相关推荐

    清华大学2024级化学生物学专业本科培养方案

    清华大学2024级化学生物学专业本科培养方案

    朗读程序代码.txt

    朗读程序代码

    复值晶格的复 LLL (CLLL) 晶格约简算法Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    数字播放声音程序VB.NET新源代码.zip

    数字播放声音程序VB.NET新源代码

    基于蒙特卡洛法的风光场景生成与概率距离快速削减算法研究,MATLAB代码 风光场景生成 场景削减 概率距离削减法 蒙特卡洛法 MATLAB:基于概率距离快速削减法的风光场景生成与削减方法 参考文档:

    基于蒙特卡洛法的风光场景生成与概率距离快速削减算法研究,MATLAB代码 风光场景生成 场景削减 概率距离削减法 蒙特卡洛法 MATLAB:基于概率距离快速削减法的风光场景生成与削减方法 参考文档:《含风光水的电厂与配电公司协调调度模型》完全复现场景削减部分 仿真平台:MATLAB平台 代码具有一定的深度和创新性,注释清晰 主要内容:风电、光伏以及电价场景不确定性模拟,首先由一组确定性的方案,通过蒙特卡洛算法,生成50种光伏场景,为了避免大规模光伏场景造成的计算困难问题,采用基于概率距离快速削减算法的场景削减法,将场景削减至5个,运行后直接给出削减后的场景以及生成的场景,并给出相应的概率,可移植以及可应用性强。 ,MATLAB; 风光场景生成; 场景削减; 概率距离削减法; 蒙特卡洛法; 深度创新性; 注释清晰; 虚拟电厂与配电公司协调调度模型; 风电光伏电价场景不确定性模拟; 概率距离快速削减算法。,基于MATLAB的场景生成与削减技术:风光场景概率距离快速削减法研究与应用

    felix-utils-1.2.0-5.el7.x64-86.rpm.tar.gz

    1、文件内容:felix-utils-1.2.0-5.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/felix-utils-1.2.0-5.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    基于java+ssm+mysql的视频播放系统 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

    exchange-bmc-os-info-1.8.18-11.el7-9.x64-86.rpm.tar.gz

    1、文件内容:exchange-bmc-os-info-1.8.18-11.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/exchange-bmc-os-info-1.8.18-11.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    基于java+ssm+mysql的花鸣B2C电子商务平台 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

    exec-maven-plugin-javadoc-1.2.1-13.el7.x64-86.rpm.tar.gz

    1、文件内容:exec-maven-plugin-javadoc-1.2.1-13.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/exec-maven-plugin-javadoc-1.2.1-13.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    基于java+ssm+mysql的咖啡销售系统 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

    HarmonyOS NEXT学习资料(鸿蒙next)

    HarmonyOS NEXT学习资料(鸿蒙next)

    sssMOR 是一个 MATLAB 工具箱,用于在状态空间中对大规模动力学系统进行模型降阶Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    论文写作与科技前沿等(2025.01.23) .pdf

    论文写作与科技前沿等(2025.01.23)

    farstream-0.1.2-8.el7.x64-86.rpm.tar.gz

    1、文件内容:farstream-0.1.2-8.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/farstream-0.1.2-8.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    2025最新网络安全建设与网络社会治考试题库及答案.doc

    2025最新网络安全建设与网络社会治考试题库及答案.doc

    1小钢琴程序QZQ2024-7-30-20-45.zip

    1小钢琴程序QZQ2024-7-30-20-45

    SharpCompress.dll

    SharpCompress

    efibootmgr-17-2.el7.x64-86.rpm.tar.gz

    1、文件内容:efibootmgr-17-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/efibootmgr-17-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    按键密码恢复程序源代码ZQ2023-11-16-11-21ZQ.zip

    按键密码恢复程序源代码ZQ2023-11-16-11-21ZQ

Global site tag (gtag.js) - Google Analytics