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
分享到:
相关推荐
1、文件内容:easymock-javadoc-1.2-22.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/easymock-javadoc-1.2-22.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
VS2010旗舰版的VB.NET版本计算器软件主窗体代码Form1代码
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
水库调洪程序:精细化模拟同频率洪水放大过程,水库调洪、同频率放大洪水过程程序 ,核心关键词:水库调洪; 放大洪水过程程序; 同频率; 洪水管理。,"水库调度优化:同频洪水过程放大程序"
VS2010旗舰版的VB.NET版本FORM10代码
2025最新机械制图期末试卷及答案.doc
1、文件内容:felix-parent-1.2.1-15.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/felix-parent-1.2.1-15.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
C++17新年烟花代码(基于SFML3.0)
PicView
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
一种采用耦合电感的开关电路分析.pdf
2025十八项医疗核心制度题库及答案.docx
这个程序可以完美运行,对于小白来说可以用于学习进阶,可以在这个基础上进行增加各种算法实现,对于大学生来说可以直接用于课设、大作业、毕设等,有答疑支持,大家一起学习共同进步,共同成长,欢迎大家下载,用于学习,谢谢。
组词程序代码
7Zip Web标记绕过漏洞 (CVE-2025-0411)poc及MinGW-w64编译器
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
2025最新医疗三基三严考试试题及答案.doc
1代码
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1、文件内容:dnssec-trigger-0.11-22.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/dnssec-trigger-0.11-22.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装