这是一个爪哇版的截图程序
复制代码代码如下:
包com.hongyuan.test;
导入java.awt.awtexception;
导入java.awt.borderlayout;
导入Java.awt.Color;
导入java.awt.dimension;
导入java.awt.eventqueue;
导入java.awt.flowlayout;
导入java.awt.graphics;
导入java.awt.image;
导入java.awt.Rectangle;
导入java.awt.robot;
导入java.awt.toolkit;
导入Java.awt.event.ActionEvent;
导入Java.awt.event.ActionListener;
导入java.awt.event.MouseAdapter;
导入java.awt.event.mouseevent;
导入Java.awt.event.MouseMotionAdapter;
导入java.awt.image.bufferedimage;
导入java.awt.image.rescaleop;
导入java.io.file;
导入java.io.ioexception;
导入java.text.simpledateformat;
导入java.util.date;
导入javax.imageio.imageio;
导入javax.swing.imageicon;
导入javax.swing.jbutton;
导入javax.swing.jfilechooser;
导入javax.swing.jtoolbar;
导入javax.swing.jwindow;
导入javax.swing.filechooser.filenameextensionfilter;
导入javax.swing.filechooser.filesystemview;
公共类ScreenShottest {
公共静态void main(string [] args){
eventqueue.invokelater(new runnable(){
@Override
public void run(){
尝试 {
ScreenShotWindow ssw = new ScreenShotWindow();
ssw.setvisible(true);
} catch(awtexception e){
e.printstacktrace();
}
}
});
}
}
/*
*截图窗口
*/
类屏幕示威窗口扩展了Jwindow
{
私人int orgx,狂欢,endx,endy;
私人bufferedimage image = null;
私人bufferedimage tempimage = null;
私人bufferedimage saveimage = null;
私有工具换件工具= null;
public ScreenShotWindow()抛出AwTexception {
//获取屏幕尺寸
Dimension d = toolkit.getDefaultToolKit()。getScreensize();
this.setbounds(0,0,d.width,d.height);
//截取屏幕
机器人机器人= new Robot();
image = robot.createscreencapture(新矩形(0,0,d.Width,d.height));
this.addmouselistener(new Mouseadapter(){
@Override
公共无效的Mousepressed(mouseevent e){
//鼠标松开时记录结束点坐标,并隐藏操作窗口
orgx = e.getx();
forgy = e.gety();
如果(工具!= null){
tools.setvisible(false);
}
}
@Override
公共无效的Mousereareed(Mouseevent E){
//鼠标松开时,显示操作窗口
如果(工具== null){
工具=新的Toolswindow(ScreenShotWindow.this,e.getX(),e.gety());
}别的{
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());
图形g = tempimage2.getGraphics();
G.DrawImage(tempimage,0,0,null);
int x = math.min(orgx,endx);
int y = math.min(狂欢,endy);
int width = math.abs(endx -orgx)+1;
int height = math.abs(endy -forgy)+1;
//加上1防止宽度或高度0
G.setColor(color.blue);
G.DrawRect(X-1,Y-1,宽度+1,高度+1);
//减1加1都了防止图片矩形框覆盖掉
saveImage = image.getSubimage(x,y,width,height);
G.DrawImage(SaveImage,x,y,null);
ScreenShotWindow.this.getGraphics()。绘制(tempimage2,0,0,screenshotwindow.this);
}
});
}
@Override
公共void Paint(Graphics g){
Rescaleop ro =新的Recaleop(0.8F,0,null);
tempimage = ro.filter(图像,null);
G.DrawImage(tempimage,0,0,this);
}
//保存图像到文件
public void saveimage()抛出ioexception {
JfileChooser JFC = new JfileChooser();
jfc.setdialogtitle(“保存”);
//文件过滤器,用户过滤可选择文件
filenameextensionFilter filter = new FileNameExtensionFilter(“ JPG”,“ JPG”);
JFC.SetFileFilter(filter);
//((初始化一个默认文件(此文件会生成到桌面上)
SimpleDateFormat SDF =新的SimpleDateFormat(“ yyymmddhhmmss”);
字符串fileName = sdf.format(new Date());
file filepath = filesystemview.getFilesystemview()。gethomedirectory();
文件defaultfile = new File(filepath + file.separator + filename +“ .jpg”);
JFC.SetSelectedFile(DefaultFile);
int flag = jfc.showsavedialog(this);
if(flag == jfilechooser.approve_option){
文件文件= JFC.GetSelectedFile();
字符串路径= file.getPath();
//检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀
if(!(path.endswith(“。jpg”)|| path.endswith(“。jpg”)){
路径+=“。jpg”;
}
//写入文件
imageio.write(saveimage,“ jpg”,new file(path));
system.exit(0);
}
}
}
/*
*操作窗口
*/
类Toolswindow扩展了Jwindow
{
私人屏幕示威窗户父母;
public toolswindow(ScreenShotWindow parent,int x,int y){
this.parent = parent;
this.init();
this.setlocation(x,y);
this.pack();
this.setvisible(true);
}
私人void init(){
this.setLayout(new BorderLayout());
jtoolbar工具栏= new jtoolbar(“ java截图”);
//保存按钮
jbutton savebutton = new jbutton(new Imageicon(“ images/save.gif”));
SaveButton.AddactionListener(new ActionListener(){
@Override
公共void Action Performed(ActionEvent E){
尝试 {
parent.saveimage();
} catch(ioexception e1){
e1.printstacktrace();
}
}
});
工具栏。add(savebutton);
//关闭按钮
jbutton collectton = new jbutton(new Imageicon(“ images/close.gif”));
collectButton.AddactionListener(new ActionListener(){
@Override
公共void Action Performed(ActionEvent E){
system.exit(0);
}
});
工具栏。add(CloseButton);
this.add(工具栏,borderlayout.north);
}
}