`
wl853
  • 浏览: 25569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

网上看到一个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);
  }
 }
 
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics