Java实现截图并保存到本地

jopen 11年前

1.java实现截图并保存到本地
提供给大家三个方法,也是整理的,都不是很难,大家需要的看看哈
2.原理都相似
------------------------------------------------------------------

package com.credream.ocr;  import java.awt.Dimension;  import java.awt.Rectangle;  import java.awt.Robot;  import java.awt.Toolkit;  import java.awt.image.BufferedImage;  import java.io.File;  import javax.imageio.ImageIO;  /*******************************************************************************   * 该JavaBean可以直接在其他Java应用程序中调用,实现屏幕的"拍照" This JavaBean is    used to snapshot the   * GUI in a Java application! You can embeded it in to your java application   * source code, and us it to snapshot the right GUI of the application   *   * @see javax.ImageIO   * @author liluqun ([email]liluqun@263.net[/email])   * @version 1.0   *   ******************************************************************************/    public class GuiCamera {        private String fileName; // 文件的前缀        private String defaultName = "GuiCamera";        static int serialNum = 0;        private String imageFormat; // 图像文件的格式        private String defaultImageFormat = "jpg";        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();           /***************************************************************************       * 默认的文件前缀为GuiCamera,文件格式为PNG格式 The default construct    will use the default       * Image file surname "GuiCamera", and default image format "png"           **************************************************************************/      public GuiCamera() {          fileName = defaultName;          imageFormat = defaultImageFormat;        }           /***************************************************************************       * @param s       *            the surname of the snapshot file       * @param format       *            the format of the image file, it can be "jpg" or "png"       *            本构造支持JPG和PNG文件的存储           **************************************************************************/      public GuiCamera(String s, String format) {            fileName = s;          imageFormat = format;      }           /***************************************************************************       * 对屏幕进行拍照 snapShot the Gui once           **************************************************************************/      public void snapShot() {            try {              // 拷贝屏幕到一个BufferedImage对象screenshot              BufferedImage screenshot = (new Robot())                      .createScreenCapture(new Rectangle(0, 0,                              (int) d.getWidth(), (int)    d.getHeight()));              serialNum++;              // 根据文件前缀变量和文件格式变量,自动生成文件名              String name = fileName + String.valueOf(serialNum) + "."                      + imageFormat;              File f = new File(name);              System.out.print("Save File " + name);              // 将screenshot对象写入图像文件              ImageIO.write(screenshot, imageFormat, f);              System.out.print("..Finished!\n");          } catch (Exception ex) {              System.out.println(ex);          }      }        public static void main(String[] args) {          GuiCamera cam = new GuiCamera("d:\\qq", "bmp");//          cam.snapShot();      }  }

-----------------------------------------------------------------------------
第二种方法:
package com.credream.ocr;    import java.awt.AWTException;  import java.awt.Color;  import java.awt.Dimension;  import java.awt.Graphics;  import java.awt.GraphicsDevice;  import java.awt.GraphicsEnvironment;  import java.awt.Rectangle;  import java.awt.Robot;  import java.awt.Toolkit;  import java.awt.event.KeyAdapter;  import java.awt.event.KeyEvent;  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.JFrame;  import javax.swing.filechooser.FileSystemView;    /**   * java截屏   * 运行后将当前屏幕截取,并最大化显示。   * 拖拽鼠标,选择自己需要的部分。   * 按Esc键保存图片到桌面,并退出程序。   * 点击右上角(没有可见的按钮),退出程序,不保存图片。   *   * @author JinCeon   */  public class SnapshotTest {      public static void main(String[] args) {          // 全屏运行          RectD rd = new RectD();          GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()                  .getDefaultScreenDevice();          gd.setFullScreenWindow(rd);      }  }     class RectD extends JFrame {      private static final long serialVersionUID = 1L;      int orgx, orgy, endx, endy;      Dimension d = Toolkit.getDefaultToolkit().getScreenSize();      BufferedImage image;      BufferedImage tempImage;      BufferedImage saveImage;      Graphics g;         @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 RectD() {          snapshot();          setVisible(true);          // setSize(d);//最大化窗口          setDefaultCloseOperation(EXIT_ON_CLOSE);          this.addMouseListener(new MouseAdapter() {              public void mousePressed(MouseEvent e) {                  orgx = e.getX();                  orgy = e.getY();              }          });          this.addMouseMotionListener(new MouseMotionAdapter() {              public void mouseDragged(MouseEvent e) {                  endx = e.getX();                  endy = e.getY();                  g = getGraphics();                  g.drawImage(tempImage, 0, 0, RectD.this);                  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或height为0                  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, RectD.this);              }          });          this.addKeyListener(new KeyAdapter() {              @Override              public void keyReleased(KeyEvent e) {                  // 按Esc键退出                  if (e.getKeyCode() == 27) {                      saveToFile();                      System.exit(0);                  }              }          });      }         public void saveToFile() {          SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss");          String name = sdf.format(new Date());          File path = FileSystemView.getFileSystemView().getHomeDirectory();          String format = "jpg";          File f = new File(path + File.separator + name + "." + format);          try {              ImageIO.write(saveImage, format, f);          } catch (IOException e) {              e.printStackTrace();          }      }         public void snapshot() {          try {              Robot robot = new Robot();              Dimension d = Toolkit.getDefaultToolkit().getScreenSize();              image = robot.createScreenCapture(new Rectangle(0, 0, d.width,                      d.height));          } catch (AWTException e) {              e.printStackTrace();          }      }  }

-------------------------------------------------------------
第三种方法:
package com.credream.robotExp;    import java.awt.AWTException;  import java.awt.Rectangle;  import java.awt.Robot;  import java.awt.image.BufferedImage;  import java.io.File;  import java.io.IOException;  import javax.imageio.ImageIO;  public class RobotExp {  public static void main(String[] args) {  try {  Robot robot = new Robot();  BufferedImage bi=robot.createScreenCapture(new Rectangle(900,800)); // 根据指定的    区域(1300,800)抓取屏幕的指定区域  ImageIO.write(bi, "jpg", new File("D:/imageTest.jpg")); //把抓取到的内容写入到一    个jpg文件中  } catch (AWTException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  }  }

----------------------------------------------------------------------
三种方法,大致相同,只不过加了些额外的方法,功能而已;都挺简单就不多说了...