Java實現截圖并保存到本地

jopen 11年前發布 | 98K 次閱讀 Java Java開發

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();
}

}</pre>
-----------------------------------------------------------------------------
第二種方法:

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();
    }
}

}</pre>
-------------------------------------------------------------
第三種方法:

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(); } } }</pre>
----------------------------------------------------------------------
三種方法,大致相同,只不過加了些額外的方法,功能而已;都挺簡單就不多說了...

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!