java实现区域内屏幕截图示例
这是一个java版的截图程序
packagecom.hongyuan.test;
importjava.awt.AWTException;
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.EventQueue;
importjava.awt.FlowLayout;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Rectangle;
importjava.awt.Robot;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseMotionAdapter;
importjava.awt.image.BufferedImage;
importjava.awt.image.RescaleOp;
importjava.io.File;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjavax.imageio.ImageIO;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFileChooser;
importjavax.swing.JToolBar;
importjavax.swing.JWindow;
importjavax.swing.filechooser.FileNameExtensionFilter;
importjavax.swing.filechooser.FileSystemView;
publicclassScreenShotTest{
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
@Override
publicvoidrun(){
try{
ScreenShotWindowssw=newScreenShotWindow();
ssw.setVisible(true);
}catch(AWTExceptione){
e.printStackTrace();
}
}
});
}
}
/*
*截图窗口
*/
classScreenShotWindowextendsJWindow
{
privateintorgx,orgy,endx,endy;
privateBufferedImageimage=null;
privateBufferedImagetempImage=null;
privateBufferedImagesaveImage=null;
privateToolsWindowtools=null;
publicScreenShotWindow()throwsAWTException{
//获取屏幕尺寸
Dimensiond=Toolkit.getDefaultToolkit().getScreenSize();
this.setBounds(0,0,d.width,d.height);
//截取屏幕
Robotrobot=newRobot();
image=robot.createScreenCapture(newRectangle(0,0,d.width,d.height));
this.addMouseListener(newMouseAdapter(){
@Override
publicvoidmousePressed(MouseEvente){
//鼠标松开时记录结束点坐标,并隐藏操作窗口
orgx=e.getX();
orgy=e.getY();
if(tools!=null){
tools.setVisible(false);
}
}
@Override
publicvoidmouseReleased(MouseEvente){
//鼠标松开时,显示操作窗口
if(tools==null){
tools=newToolsWindow(ScreenShotWindow.this,e.getX(),e.getY());
}else{
tools.setLocation(e.getX(),e.getY());
}
tools.setVisible(true);
tools.toFront();
}
});
this.addMouseMotionListener(newMouseMotionAdapter(){
@Override
publicvoidmouseDragged(MouseEvente){
//鼠标拖动时,记录坐标并重绘窗口
endx=e.getX();
endy=e.getY();
//临时图像,用于缓冲屏幕区域放置屏幕闪烁
ImagetempImage2=createImage(ScreenShotWindow.this.getWidth(),ScreenShotWindow.this.getHeight());
Graphicsg=tempImage2.getGraphics();
g.drawImage(tempImage,0,0,null);
intx=Math.min(orgx,endx);
inty=Math.min(orgy,endy);
intwidth=Math.abs(endx-orgx)+1;
intheight=Math.abs(endy-orgy)+1;
//加上1防止width或height0
g.setColor(Color.BLUE);
g.drawRect(x-1,y-1,width+1,height+1);
//减1加1都了防止图片矩形框覆盖掉
saveImage=image.getSubimage(x,y,width,height);
g.drawImage(saveImage,x,y,null);
ScreenShotWindow.this.getGraphics().drawImage(tempImage2,0,0,ScreenShotWindow.this);
}
});
}
@Override
publicvoidpaint(Graphicsg){
RescaleOpro=newRescaleOp(0.8f,0,null);
tempImage=ro.filter(image,null);
g.drawImage(tempImage,0,0,this);
}
//保存图像到文件
publicvoidsaveImage()throwsIOException{
JFileChooserjfc=newJFileChooser();
jfc.setDialogTitle("保存");
//文件过滤器,用户过滤可选择文件
FileNameExtensionFilterfilter=newFileNameExtensionFilter("JPG","jpg");
jfc.setFileFilter(filter);
//初始化一个默认文件(此文件会生成到桌面上)
SimpleDateFormatsdf=newSimpleDateFormat("yyyymmddHHmmss");
StringfileName=sdf.format(newDate());
FilefilePath=FileSystemView.getFileSystemView().getHomeDirectory();
FiledefaultFile=newFile(filePath+File.separator+fileName+".jpg");
jfc.setSelectedFile(defaultFile);
intflag=jfc.showSaveDialog(this);
if(flag==JFileChooser.APPROVE_OPTION){
Filefile=jfc.getSelectedFile();
Stringpath=file.getPath();
//检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀
if(!(path.endsWith(".jpg")||path.endsWith(".JPG"))){
path+=".jpg";
}
//写入文件
ImageIO.write(saveImage,"jpg",newFile(path));
System.exit(0);
}
}
}
/*
*操作窗口
*/
classToolsWindowextendsJWindow
{
privateScreenShotWindowparent;
publicToolsWindow(ScreenShotWindowparent,intx,inty){
this.parent=parent;
this.init();
this.setLocation(x,y);
this.pack();
this.setVisible(true);
}
privatevoidinit(){
this.setLayout(newBorderLayout());
JToolBartoolBar=newJToolBar("Java截图");
//保存按钮
JButtonsaveButton=newJButton(newImageIcon("images/save.gif"));
saveButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
try{
parent.saveImage();
}catch(IOExceptione1){
e1.printStackTrace();
}
}
});
toolBar.add(saveButton);
//关闭按钮
JButtoncloseButton=newJButton(newImageIcon("images/close.gif"));
closeButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
System.exit(0);
}
});
toolBar.add(closeButton);
this.add(toolBar,BorderLayout.NORTH);
}
}
相关文章
- java字符串常用操作(查找、截取、分割)
- java怎么输出保留两位小数_剖析Java输出怎么保留两位小数「建议收藏」
- Java基础知识总结(超详细整理),java从入门到精通pdf「建议收藏」
- java axis_Java 使用Axis实现WebService实例
- java中random方法取值范围_Java Random.nextInt()方法,随机产生某个范围内的整数
- java 舆情分析_基于Java实现网络舆情分析系统研究与实现.doc[通俗易懂]
- Java方法重载_java入门方法的使用
- 【Java AWT 图形界面编程】菜单组件 ③ ( PopupMenu 菜单组件实现步骤 | 使用 MouseAdapter 设置事件监听器 | 代码示例 )
- Java程序构建基于Redis的缓存系统(java用redis)
- 删除Java操作Redis实现过期数据的自动删除(redisjava过期)
- 控制Redis Java过期控制实现技术(redisjava过期)
- MySQL与Java的结合:实现强大的数据持久化功能(mysql与java)
- 实现Redis中 Java实现的过期缓存策略(redisjava过期)
- 处理Java中使用Redis实现过期清理(redisjava过期)
- 清理机制Redis与Java实现的过期数据清理机制(redisjava过期)
- 清理Redis中Java实现的过期数据清除服务(redisjava过期)
- Java脚本实现Linux系统的登录(java登录Linux)
- Java中使用Redis包实现高效缓存(redis包java)
- 使用Java远程控制Linux 实现简单、高效的服务器管理(java控制linux)
- 在Linux上实现Java程序的运行(linux运行java程序)
- 使用Java程序执行Linux指令:实现自动化操作(java执行linux命令)
- Java解答Oracle使用更轻松的实现方式(oracle写成java)
- Java采用反射获取class属性值的实现代码
- java实现sunday算法示例分享
- java大数乘法的简单实现浮点数乘法运算
- Java终止循环体的具体实现
- java实现操作系统的短进程作业调度示例分享
- java按钮控件数组实现计算器界面示例分享
- java实现查找文本内容替换功能示例
- java使用http实现文件下载学习示例
- java实现服务器文件打包zip并下载的示例(边打包边下载)