java截屏簡單例子

jopen 9年前發布 | 2K 次閱讀 Java

java截屏

 * 運行后將當前屏幕截取,并最大化顯示。

 * 拖拽鼠標,選擇自己需要的部分。

 * 按Esc鍵保存圖片到桌面,并退出程序。

 * 點擊右上角(沒有可見的按鈕),退出程序,不保存圖片。

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>

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