这篇文章主要介绍了java截图示例,需要的朋友可以参考下
这是一个java版的截图程序
package com.hongyuan.test;import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.image.BufferedImage;
import java.awt.image.RescaleOp;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JToolBar;
import javax.swing.JWindow;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileSystemView;
public class ScreenShottest {
public static void main(String[] args) {
EventQueue.invokelater(new Runnable() {
@Override
public void run() {
try {
ScreenShotwindow ssw=new ScreenShotwindow();
ssw.setVisible(true);
} catch (AWTException e) {
e.printstacktrace();
}
}
});
}
}
/*
* 截图窗口
*/
class ScreenShotwindow extends JWindow
{
private int orgx, orgy, endx, endy;
private BufferedImage image=null;
private BufferedImage tempImage=null;
private BufferedImage saveImage=null;
private ToolsWindow tools=null;
public ScreenShotwindow() throws AWTException{
//获取屏幕尺寸
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setBounds(0, 0, d.width, d.height);
//截取屏幕
Robot robot = new Robot();
image = robot.createScreenCapture(new Rectangle(0, 0, d.width,d.height));
this.addMouseListener(new MouseAdapter() {
@Override
public void mousepressed(MouseEvent e) {
//鼠标松开时记录结束点坐标,并隐藏操作窗口
orgx = e.getX();
orgy = e.getY();
if(tools!=null){
tools.setVisible(false);
}
}
@Override
public void mouseReleased(MouseEvent e) {
//鼠标松开时,显示操作窗口
if(tools==null){
tools=new ToolsWindow(ScreenShotwindow.this,e.getX(),e.getY());
}else{
tools.setLocation(e.getX(),e.getY());
}
tools.setVisible(true);
tools.toFront();
}
});
this.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
//鼠标拖动时,记录坐标并重绘窗口
endx = e.getX();
endy = e.getY();
//临时图像,用于缓冲屏幕区域放置屏幕闪烁
Image tempImage2=createImage(ScreenShotwindow.this.getWidth(),ScreenShotwindow.this.getHeight());
Graphics g =tempImage2.getGraphics();
g.drawImage(tempImage, 0, 0, null);
int x = Math.min(orgx, endx);
int y = Math.min(orgy, endy);
int width = Math.abs(endx - orgx)+1;
int height = 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
public void paint(Graphics g) {
RescaleOp ro = new RescaleOp(0.8f, 0, null);
tempImage = ro.filter(image, null);
g.drawImage(tempImage, 0, 0, this);
}
//保存图像到文件
public void saveImage() throws IOException {
JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle("保存");
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG", "jpg");
jfc.setFileFilter(filter);
SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss");
String fileName = sdf.format(new Date());
File filePath = FileSystemView.getFileSystemView().getHomeDirectory();
File defaultFile = new File(filePath + File.separator + fileName + ".jpg");
jfc.setSelectedFile(defaultFile);
int flag = jfc.showSaveDialog(this);
if(flag==JFileChooser.APPROVE_OPTION){
File file=jfc.getSelectedFile();
String path=file.getPath();
if(!(path.endsWith(".jpg")||path.endsWith(".JPG"))){
path+=".jpg";
}
//写入文件
ImageIO.write(saveImage,"jpg",new File(path));
System.exit(0);
}
}
}
/*
* 操作窗口
*/
class ToolsWindow extends JWindow
{
private ScreenShotwindow parent;
public ToolsWindow(ScreenShotwindow parent,int x,int y) {
this.parent=parent;
this.init();
this.setLocation(x, y);
this.pack();
this.setVisible(true);
}
private void init(){
this.setLayout(new BorderLayout());
JToolBar toolBar=new JToolBar("Java 截图");
//保存按钮
JButton saveButton=new JButton(new ImageIcon("images/save.gif"));
saveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
parent.saveImage();
} catch (IOException e1) {
e1.printstacktrace();
}
}
});
toolBar.add(saveButton);
//关闭按钮
JButton closeButton=new JButton(new ImageIcon("images/close.gif"));
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
toolBar.add(closeButton);
this.add(toolBar,BorderLayout.norTH);
}
}
上一篇:Spring中如何动态注入Bean实例教程下一篇:10分钟带你理解Java中的反射 热门搜索:
java代码实现截图
区域截屏
区域截图
java实例
屏幕截图
相关文章
基于C#实现的屏幕指定区域截屏代码
2021-10-06阅读(4455)评论(0)推荐()这篇文章主要介绍了C#实现的屏幕指定区域截屏代码,有需要的朋友可以参考一下
java编程实现屏幕截图(截屏)代码总结
2021-09-18阅读(8463)评论(0)推荐()这篇文章主要介绍了java编程实现屏幕截图(截屏)代码,结合3个实例总结分析了Java截屏时页面抓取及图片保存的相关技巧,具有一定参考借鉴价值,需要的朋友可以参...
Android实现矩形区域截屏的方法
2021-10-10阅读(8752)评论(0)推荐()对屏幕进行截屏并裁剪有两种方式:早截图和晚截图,对于早截图和晚截图的概念大家通过本文详解学习。本文重点给大家介绍android实现矩形区域截屏的方法,需要的朋友...
java实现区域内屏幕截图示例
2021-09-18阅读(5088)评论(0)推荐()这篇文章主要介绍了java截图示例,需要的朋友可以参考下
Python 实现局域网远程屏幕截图案例
2021-10-09阅读(5643)评论(0)推荐()这篇文章主要介绍了Python 实现局域网远程屏幕截图案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
c#不使用系统api实现可以指定区域屏幕截屏功能
2021-11-19阅读(7998)评论(0)推荐()这篇文章主要介绍了不使用系统API通过纯c#实现屏幕指定区域截屏功能,截屏后还可以保存图象文件,大家参考使用吧
c#实现winform屏幕截图并保存的示例
2021-10-04阅读(6150)评论(0)推荐()这篇文章主要介绍了c#实现winform屏幕截图并保存的示例,需要的朋友可以参考下
取消
提交评论