首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

网下看到一个JAVA截图工具,有空研究一上

2012-12-27 
网上看到一个JAVA截图工具,有空研究一下package org.apache.log4j/*作者:泡沫地址:http://hi.baidu.com/a

网上看到一个JAVA截图工具,有空研究一下

package org.apache.log4j;/*作者:泡沫地址:http://hi.baidu.com/av51功能:用于截取图片,方便快捷!mail:yuhuidog#163.com (注意:其中#为@)*/import java.awt.AWTException;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import java.awt.Cursor;import java.awt.Dimension;import java.awt.FileDialog;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.Panel;import java.awt.Point;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.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;public class AWTpicture extends Frame implements MouseListener,MouseMotionListener,ActionListener{ private int firstX,firstY,frameWidth,frameHeight; private int firstWith,firstHeight,firstPointx,firstPointy; private BufferedImage bi,sbi,original; private Robot robot; private Rectangle rectangle; private Rectangle rectangleCursor,rectangleCursorUp,rectangleCursorDown,rectangleCursorLeft,rectangleCursorRight; private Rectangle rectangleCursorRU,rectangleCursorRD,rectangleCursorLU,rectangleCursorLD; private Image bis; private Dimension dimension; private Button button,button2,clearButton; private Point[] point=new Point[3]; private int width,height; private int nPoints=5; private Panel panel; private boolean drawHasFinish=false,change=false; private int changeFirstPointX,changeFirstPointY,changeWidth,changeHeight; private boolean changeUP=false,changeDOWN=false,changeLEFT=false,changeRIGHT=false,changeRU=false,changeRD=false,changeLU=false,changeLD=false; private boolean clearPicture=false,redraw=false; private FileDialog fileDialog; private AWTpicture(){  //取得屏幕大小  dimension=Toolkit.getDefaultToolkit().getScreenSize();  frameWidth=dimension.width;  frameHeight=dimension.height;    fileDialog=new FileDialog(this,"泡沫截图",FileDialog.SAVE);  rectangle=new Rectangle(frameWidth,frameHeight);  panel=new Panel();  button=new Button("退出");  button.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));  button.setBackground(Color.green);  button2=new Button("截取");  button2.setBackground(Color.darkGray);  button2.addActionListener(new MyTakePicture(this));  button2.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));  button.addActionListener(this);  clearButton=new Button("重绘");  clearButton.setBackground(Color.green);  clearButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));  clearButton.addActionListener(new MyClearPicture(this));  panel.setLayout(new BorderLayout());  panel.add(clearButton, BorderLayout.SOUTH);    panel.add(button, BorderLayout.NORTH);  panel.add(button2, BorderLayout.CENTER);  try {   robot=new Robot();  } catch (AWTException e) {      e.printStackTrace();  }    //截取全屏  bi=robot.createScreenCapture(rectangle);  original=bi;  this.setSize(frameWidth,frameHeight);  this.setUndecorated(true);  this.addMouseListener(this);  this.addMouseMotionListener(this);  this.add(panel,BorderLayout.EAST);  this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));  this.setVisible(true);  this.repaint(); } public static void main(String[] args){  new AWTpicture(); } public void paint(Graphics g) {     this.drawR(g);   }   //缓存图片 public void update(Graphics g){  if(bis==null){   bis=this.createImage(frameWidth, frameHeight);  }  Graphics ga=bis.getGraphics();  Color c=ga.getColor();  ga.setColor(Color.black);  ga.fillRect(0, 0, frameWidth, frameHeight);  ga.setColor(c);  paint(ga);  g.drawImage(bis, 0, 0, frameWidth, frameHeight, null); } public void mouseClicked(MouseEvent e) {     } public void mouseEntered(MouseEvent e) {  // TODO Auto-generated method stub   } public void mouseExited(MouseEvent e) {  // TODO Auto-generated method stub   } public void mousePressed(MouseEvent e) {  // TODO Auto-generated method stub   } public void mouseReleased(MouseEvent e) {  if(!drawHasFinish){   if(point[1].x<point[2].x && point[1].y<point[2].y){    firstPointx=point[1].x;    firstPointy=point[1].y;   }   if(point[1].x>point[2].x && point[1].y<point[2].y){    firstPointx=point[2].x;    firstPointy=point[1].y;   }   if(point[1].x<point[2].x && point[1].y>point[2].y){    firstPointx=point[1].x;    firstPointy=point[2].y;   }   if(point[1].x>point[2].x && point[1].y>point[2].y){    firstPointx=point[2].x;    firstPointy=point[2].y;   }   changeFirstPointX=firstPointx;   changeFirstPointY=firstPointy;   if(point[1]!=null && point[2]!=null ){   rectangleCursorUp=new Rectangle(firstPointx+20,firstPointy-10,width-40,20);   rectangleCursorDown=new Rectangle(firstPointx+20,firstPointy+height-10,width-40,20);   rectangleCursorLeft=new Rectangle(firstPointx-10,firstPointy+10,20,height-20);   rectangleCursorRight=new Rectangle(firstPointx+width-10,firstPointy+10,20,height-20);   rectangleCursorLU=new Rectangle(firstPointx-10,firstPointy-10,30,20);   rectangleCursorLD=new Rectangle(firstPointx-10,firstPointy+height-10,30,20);   rectangleCursorRU=new Rectangle(firstPointx+width-10,firstPointy-10,20,20);   rectangleCursorRD=new Rectangle(firstPointx+width-10,firstPointy+height-10,20,20);   drawHasFinish=true;   }     }  //确定每边能改变大小的矩形  if(drawHasFinish){   rectangleCursorUp=new Rectangle(changeFirstPointX+20,changeFirstPointY-10,changeWidth-40,20);   rectangleCursorDown=new Rectangle(changeFirstPointX+20,changeFirstPointY+changeHeight-10,changeWidth-40,20);   rectangleCursorLeft=new Rectangle(changeFirstPointX-10,changeFirstPointY+10,20,changeHeight-20);   rectangleCursorRight=new Rectangle(changeFirstPointX+changeWidth-10,changeFirstPointY+10,20,changeHeight-20);   rectangleCursorLU=new Rectangle(changeFirstPointX-2,changeFirstPointY-2,10,10);   rectangleCursorLD=new Rectangle(changeFirstPointX-2,changeFirstPointY+changeHeight-2,10,10);   rectangleCursorRU=new Rectangle(changeFirstPointX+changeWidth-2,changeFirstPointY-2,10,10);   rectangleCursorRD=new Rectangle(changeFirstPointX+changeWidth-2,changeFirstPointY+changeHeight-2,10,10);  }       } public void mouseDragged(MouseEvent e) {  point[2]=e.getPoint();  //if(!drawHasFinish){   this.repaint(); // }       //托动鼠标移动大小  if(change){   if(changeUP){    changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;    changeFirstPointY=e.getPoint().y;       }   if(changeDOWN){    changeHeight=e.getPoint().y-changeFirstPointY;   }   if(changeLEFT){    changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;    changeFirstPointX=e.getPoint().x;   }   if(changeRIGHT){    changeWidth=e.getPoint().x-changeFirstPointX;   }   if(changeLU){    changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;    changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;    changeFirstPointX=e.getPoint().x;    changeFirstPointY=e.getPoint().y;   }   if(changeLD){    changeWidth=changeWidth+changeFirstPointX-e.getPoint().x;    changeHeight=e.getPoint().y-changeFirstPointY;    changeFirstPointX=e.getPoint().x;       }   if(changeRU){    changeWidth=e.getPoint().x-changeFirstPointX;    changeHeight=changeHeight+changeFirstPointY-e.getPoint().y;    changeFirstPointY=e.getPoint().y;   }   if(changeRD){    changeWidth=e.getPoint().x-changeFirstPointX;    changeHeight=e.getPoint().y-changeFirstPointY;      }   this.repaint();  }   } public void mouseMoved(MouseEvent e) {  point[1]=e.getPoint();  //改变鼠标的形状  if(rectangleCursorUp!=null && rectangleCursorUp.contains(point[1])){      this.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));   change=true;   changeUP=true;  }else if(rectangleCursorDown!=null && rectangleCursorDown.contains(point[1])){   this.setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));   change=true;   changeDOWN=true;  }else if(rectangleCursorLeft!=null && rectangleCursorLeft.contains(point[1])){   this.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));   change=true;   changeLEFT=true;  }else if(rectangleCursorRight!=null && rectangleCursorRight.contains(point[1]) ){   this.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));   change=true;   changeRIGHT=true;  }else if(rectangleCursorLU !=null && rectangleCursorLU.contains(point[1])){   this.setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR));   change=true;   changeLU=true;  }else if(rectangleCursorLD !=null && rectangleCursorLD.contains(point[1])){   this.setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR));   change=true;   changeLD=true;  }else if(rectangleCursorRU!=null && rectangleCursorRU.contains(point[1])){   this.setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR));   change=true;   changeRU=true;  }else if(rectangleCursorRD!=null && rectangleCursorRD.contains(point[1])){   this.setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR));   change=true;   changeRD=true;  }else{   this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));   changeUP=false;changeDOWN=false;changeRIGHT=false;changeLEFT=false;changeRU=false;   changeRD=false;changeLU=false;changeLD=false;  }  redraw=false; } public void actionPerformed(ActionEvent e) {  System.exit(0);   } class MyTakePicture implements ActionListener{  AWTpicture aWTpicture;  MyTakePicture(AWTpicture aWTpicture){   this.aWTpicture=aWTpicture;  }  //保存图片  public void actionPerformed(ActionEvent e) {   fileDialog.setVisible(true);   if(changeWidth>0){    sbi=bi.getSubimage(changeFirstPointX,changeFirstPointY,changeWidth,changeHeight);        File file=new File(fileDialog.getDirectory());    file.mkdir();        try {     ImageIO.write(sbi, "jpeg",new File(file,fileDialog.getFile()+".jpg") );    } catch (IOException e1) {          e1.printStackTrace();    }   }     }         } class MyClearPicture implements ActionListener{  AWTpicture aWTpicture;  MyClearPicture(AWTpicture aWTpicture){   this.aWTpicture=aWTpicture;  }    public void actionPerformed(ActionEvent e) {   drawHasFinish=false;   change=false;   redraw=true;   rectangleCursorUp=null;   rectangleCursorDown=null;   rectangleCursorLeft=null;   rectangleCursorRight=null;   rectangleCursorRU=null;   rectangleCursorRD=null;   rectangleCursorLU=null;   rectangleCursorLD=null;   changeWidth=0;   changeHeight=0;      aWTpicture.repaint();        }   } public void drawR(Graphics g){  g.drawImage(bi, 0,0,frameWidth,frameHeight, null);    if(point[1]!=null &&point[2]!=null &&!drawHasFinish && !redraw){   int[] xPoints={point[1].x,point[2].x,point[2].x,point[1].x,point[1].x};   int[] yPoints={point[1].y,point[1].y,point[2].y,point[2].y,point[1].y};   width=(point[2].x-point[1].x)>0?(point[2].x-point[1].x):(point[1].x-point[2].x);   height=(point[2].y-point[1].y)>0?(point[2].y-point[1].y):(point[1].y-point[2].y);   changeWidth=width;   changeHeight=height;   Color c=g.getColor();   g.setColor(Color.red);   g.drawString(width+"*"+height, point[1].x, point[1].y-5);   //画点   /*int i;   if()*/   if(point[1].x<point[2].x && point[1].y<point[2].y){    firstPointx=point[1].x;    firstPointy=point[1].y;   }   if(point[1].x>point[2].x && point[1].y<point[2].y){    firstPointx=point[2].x;    firstPointy=point[1].y;   }   if(point[1].x<point[2].x && point[1].y>point[2].y){    firstPointx=point[1].x;    firstPointy=point[2].y;   }   if(point[1].x>point[2].x && point[1].y>point[2].y){    firstPointx=point[2].x;    firstPointy=point[2].y;   }      g.fillRect(firstPointx-2,firstPointy-2 , 5,5);   g.fillRect(firstPointx+(width)/2,firstPointy-2 , 5,5);   g.fillRect(firstPointx+width-2,firstPointy-2 , 5,5);   g.fillRect(firstPointx+width-2,firstPointy+ height/2-2, 5,5);   g.fillRect(firstPointx+width-2,firstPointy+height-2, 5,5);   g.fillRect(firstPointx+(width)/2,firstPointy+height-2, 5,5);   g.fillRect(firstPointx-2,firstPointy+height-2, 5,5);   g.fillRect(firstPointx-2,firstPointy+ height/2-2, 5,5);   //画矩形   //g.drawString("fafda", point[1].x-100, point[1].y-5);   g.drawPolyline(xPoints, yPoints, nPoints);     }    if(change){   g.setColor(Color.red);   g.drawString(changeWidth+"*"+changeHeight, changeFirstPointX, changeFirstPointY-5);      g.fillRect(changeFirstPointX-2,changeFirstPointY-2 , 5,5);   g.fillRect(changeFirstPointX+(changeWidth)/2,changeFirstPointY-2 , 5,5);   g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY-2 , 5,5);   g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY+ changeHeight/2-2, 5,5);   g.fillRect(changeFirstPointX+changeWidth-2,changeFirstPointY+changeHeight-2, 5,5);   g.fillRect(changeFirstPointX+(changeWidth)/2,changeFirstPointY+changeHeight-2, 5,5);   g.fillRect(changeFirstPointX-2,changeFirstPointY+changeHeight-2, 5,5);   g.fillRect(changeFirstPointX-2,changeFirstPointY+ changeHeight/2-2, 5,5);      g.drawRect(changeFirstPointX, changeFirstPointY, changeWidth, changeHeight);  } } }

热点排行