這是一個爪哇版的截圖程序
複製代碼代碼如下:
包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);
}
}