java实现截图并保存到本地

1.java实现截图并保存到本地

提供给大家三个方法,随意整理的

2.方法一:

 

  1.  
    package com.credream.ocr;
  2.  
     
  3.  
    import java.awt.Dimension;
  4.  
    import java.awt.Rectangle;
  5.  
    import java.awt.Robot;
  6.  
    import java.awt.Toolkit;
  7.  
    import java.awt.image.BufferedImage;
  8.  
    import java.io.File;
  9.  
     
  10.  
    import javax.imageio.ImageIO;
  11.  
     
  12.  
    public class GuiCamera {
  13.  
    private String fileName;
  14.  
    private String defaultName= "GuiCamera";
  15.  
    static int serialNum= 0;
  16.  
    private String imageFormat; //图像文件的格式
  17.  
    private String defaultImageFormat= "jpg";
  18.  
    Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
  19.  
     
  20.  
    public GuiCamera(){
  21.  
    fileName=defaultName;
  22.  
    imageFormat=defaultImageFormat;
  23.  
    }
  24.  
     
  25.  
    public GuiCamera(String s,String format) {
  26.  
    fileName=s;
  27.  
    imageFormat=format;
  28.  
    }
  29.  
    /**
  30.  
    * 对屏幕进行拍照
  31.  
    *
  32.  
    * **/
  33.  
    public void snapshot(){
  34.  
    try {
  35.  
    //拷贝屏幕到一个BufferedImage对象screenshot
  36.  
    BufferedImage screenshot=( new Robot()).createScreenCapture(
  37.  
    new Rectangle( 0, 0,( int)d.getWidth(),( int)d.getHeight()));
  38.  
    serialNum++;
  39.  
    //根据文件前缀变量和文件格式变量,自动生成文件名
  40.  
    String name=fileName+String.valueOf(serialNum)+ "."+imageFormat;
  41.  
    System.out.println(name);
  42.  
    File f= new File(name);
  43.  
    System.out.println( "Save File-"+name);
  44.  
    //将screenshot对象写入图像文件
  45.  
    ImageIO.write(screenshot, imageFormat, f);
  46.  
    System.out.println( "..Finished");
  47.  
     
  48.  
    } catch (Exception e) {
  49.  
    System.out.println(e);
  50.  
    }
  51.  
    }
  52.  
    public static void main(String[] args) {
  53.  
    //"C:\\sally\\bootstrap栅格"是根据自己随意找的一个图片形式,"png"是图片的格式
  54.  
    GuiCamera cam= new GuiCamera( "C:\\sally\\bootstrap栅格", "png");
  55.  
    cam.snapshot();
  56.  
    }
  57.  
    }

----------------------------------------------------------------------------------------------------------------------------------------

3.方法二:

 

  1.  
    package com.credream.ocr;
  2.  
     
  3.  
    import java.awt.AWTException;
  4.  
    import java.awt.Color;
  5.  
    import java.awt.Dimension;
  6.  
    import java.awt.Graphics;
  7.  
    import java.awt.GraphicsDevice;
  8.  
    import java.awt.GraphicsEnvironment;
  9.  
    import java.awt.Rectangle;
  10.  
    import java.awt.Robot;
  11.  
    import java.awt.Toolkit;
  12.  
    import java.awt.event.KeyAdapter;
  13.  
    import java.awt.event.KeyEvent;
  14.  
    import java.awt.event.MouseAdapter;
  15.  
    import java.awt.event.MouseEvent;
  16.  
    import java.awt.event.MouseMotionAdapter;
  17.  
    import java.awt.image.BufferedImage;
  18.  
    import java.awt.image.RescaleOp;
  19.  
    import java.io.File;
  20.  
    import java.io.IOException;
  21.  
    import java.text.SimpleDateFormat;
  22.  
    import java.util.Date;
  23.  
     
  24.  
    import javax.imageio.ImageIO;
  25.  
    import javax.swing.JFrame;
  26.  
    import javax.swing.filechooser.FileSystemView;
  27.  
     
  28.  
    class RectD extends JFrame{
  29.  
     
  30.  
    private static final long serialVersionUID = 1L;
  31.  
    int orgx,orgy,endx,endy;
  32.  
    Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
  33.  
    BufferedImage image;
  34.  
    BufferedImage tempImage;
  35.  
    BufferedImage saveImage;
  36.  
    Graphics g;
  37.  
     
  38.  
    @Override
  39.  
    public void paint(Graphics g) {
  40.  
    //缩放因子和偏移量
  41.  
    RescaleOp ro= new RescaleOp( 0.8f, 0, null);
  42.  
    tempImage=ro.filter(image, null);
  43.  
    g.drawImage(tempImage, 0, 0, this);
  44.  
    }
  45.  
     
  46.  
    public RectD(){
  47.  
    snapshot();
  48.  
    setVisible( true);
  49.  
    //setSize(d);//最大化窗口
  50.  
    setDefaultCloseOperation(EXIT_ON_CLOSE);
  51.  
     
  52.  
    this.addMouseListener( new MouseAdapter(){
  53.  
    public void mousePressed(MouseEvent e){
  54.  
    orgx=e.getX();
  55.  
    orgy=e.getY();
  56.  
    }
  57.  
    });
  58.  
    //鼠标运动监听器
  59.  
    this.addMouseMotionListener( new MouseMotionAdapter() {
  60.  
    //鼠标拖拽事件
  61.  
    public void mouseDragged(MouseEvent e) {
  62.  
    endx=e.getX();
  63.  
    endy=e.getY();
  64.  
    g=getGraphics();
  65.  
    g.drawImage(tempImage, 0, 0, RectD. this);
  66.  
    int x=Math.min(orgx, endx);
  67.  
    int y=Math.min(orgy,endy);
  68.  
    //加上1,防止width,height为0
  69.  
    int width=Math.abs(endx-orgx)+ 1;
  70.  
    int height=Math.abs(endy-orgy)+ 1;
  71.  
    g.setColor(Color.BLUE);
  72.  
    g.drawRect(x- 1, y- 1, width+ 1, height+ 1);
  73.  
    //减1,加1都是为了防止图片将矩形框覆盖掉
  74.  
    saveImage=image.getSubimage(x, y, width, height);
  75.  
    g.drawImage(saveImage, x, y,RectD. this);
  76.  
    }
  77.  
    });
  78.  
     
  79.  
    this.addKeyListener( new KeyAdapter() {
  80.  
    @Override
  81.  
    //按键释放
  82.  
    public void keyReleased(KeyEvent e){
  83.  
    //按Esc键退出
  84.  
    if(e.getKeyCode()== 27){
  85.  
    saveToFile();
  86.  
    System.exit( 0);
  87.  
    }
  88.  
    }
  89.  
    });
  90.  
    }
  91.  
    public void saveToFile(){
  92.  
    SimpleDateFormat sdf= new SimpleDateFormat( "yyyymmddHHmmss");
  93.  
    String name=sdf.format( new Date());
  94.  
    File path=FileSystemView.getFileSystemView().getHomeDirectory();
  95.  
    String format= "jpg";
  96.  
    File f= new File(path+File.separator+name+ "."+format);
  97.  
    try {
  98.  
    ImageIO.write(saveImage, format, f);
  99.  
    } catch (IOException e) {
  100.  
    e.printStackTrace();
  101.  
    }
  102.  
    }
  103.  
     
  104.  
    public void snapshot(){
  105.  
     
  106.  
    try {
  107.  
    Robot robot= new Robot();
  108.  
    Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
  109.  
    image=robot.createScreenCapture( new Rectangle( 0, 0,d.width,d.height));
  110.  
     
  111.  
    } catch (AWTException e) {
  112.  
    e.printStackTrace();
  113.  
    }
  114.  
    }
  115.  
     
  116.  
    public static void main(String[] args) {
  117.  
    //全屏运行
  118.  
    RectD rd = new RectD();
  119.  
    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()
  120.  
    .getDefaultScreenDevice();
  121.  
    gd.setFullScreenWindow(rd);
  122.  
    }
  123.  
    }

----------------------------------------------------------------------------------------------------------------------------------------

4.方法三:

 

  1.  
    package com.credream.ocr;
  2.  
    import java.awt.AWTException;
  3.  
    import java.awt.Rectangle;
  4.  
    import java.awt.Robot;
  5.  
    import java.awt.image.BufferedImage;
  6.  
    import java.io.File;
  7.  
    import java.io.IOException;
  8.  
    import javax.imageio.ImageIO;
  9.  
     
  10.  
    public class RobotExp {
  11.  
    public static void main(String[] args) {
  12.  
    try {
  13.  
    Robot robot= new Robot();
  14.  
    //根据指定的区域抓取屏幕的指定区域,1300是长度,800是宽度。
  15.  
    BufferedImage bi=robot.createScreenCapture( new Rectangle( 1300, 800));
  16.  
    //把抓取到的内容写到一个jpg文件中
  17.  
    ImageIO.write(bi, "jpg", new File( "C:\\sally\\bootstrap栅格1.png"));
  18.  
     
  19.  
    } catch (AWTException e) {
  20.  
    e.printStackTrace();
  21.  
    } catch (IOException e) {
  22.  
    e.printStackTrace();
  23.  
    }
  24.  
    }
  25.  
    }

------------------------------------------------------------------------------------------------------------------------------------

三种方法,大致相同,只不过有的加了一些额外的方法。

https://blog.csdn.net/sanluo11/article/details/61923549

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值