2025-03-25

    主要使用的是java.util.Robot類來捕獲屏幕,可以實現對屏幕一個矩形區域的捕獲,通過這個類,我們也可以實現一個遠程桌面控制的程序。


    package com.qiu.util;


    import java.io.*;


    import java.net.*;


    import javax.swing.*;


    import java.awt.*;


    import java.awt.event.*;


    import java.awt.image.*;


    import javax.imageio.*;


    import java.io.*;


    /**@Author Qiu_BaiChao


    *一個簡單的屏幕抓圖


    *


    **/


    public class ScreenCapture {


    //test main


    public static void main(String[] args) throws Exception{


    String userdir = System.getProperty(“user.dir”);


    File tempFile = new File(“d:”,”temp.png”);


    ScreenCapture capture = ScreenCapture.getInstance();


    capture.captureImage();


    JFrame frame = new JFrame();


    JPanel panel = new JPanel();


    panel.setLayout(new BorderLayout());


    JLabel imagebox = new JLabel();


    panel.add(BorderLayout.CENTER,imagebox);


    imagebox.setIcon(capture.getPickedIcon());


    capture.saveToFile(tempFile);


    capture.captureImage();


    imagebox.setIcon(capture.getPickedIcon());


    frame.setContentPane(panel);


    frame.setSize(400,300);


    frame.show();


    System.out.println(“Over”);


    }


    private ScreenCapture() {


    try{


    robot = new Robot();


    }


    catch(AWTException e) {


    System.err.println(“Internal Error: ” + e);


    e.printStackTrace();


    }


    JPanel cp = (JPanel)dialog.getContentPane();


    cp.setLayout(new BorderLayout());


    labFullScreenImage.addMouseListener(new MouseAdapter() {


    public void mouseReleased(MouseEvent evn) {


    isFirstPoint = true;


    pickedImage = fullScreenImage.getSubimage(recX,recY,recW,recH);


    dialog.setVisible(false);


    }


    });


    labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() {


    public void mouseDragged(MouseEvent evn) {


    if(isFirstPoint) {


    x1 = evn.getX();


    y1 = evn.getY();


    isFirstPoint = false;


    }


    else {


    x2 = evn.getX();


    y2 = evn.getY();


    int maxX = Math.max(x1,x2);


    int maxY = Math.max(y1,y2);


    int minX = Math.min(x1,x2);


    int minY = Math.min(y1,y2);


    recX = minX;


    recY = minY;


    recW = maxX-minX;


    recH = maxY-minY;


    labFullScreenImage.drawRectangle(recX,recY,recW,recH);


    }


    }


    public void mouseMoved(MouseEvent e) {


    labFullScreenImage.drawCross(e.getX(),e.getY());


    }


    });


    cp.add(BorderLayout.CENTER,labFullScreenImage);


    dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));


    dialog.setAlwaysOnTop(true);


    dialog.setMaximumSize(


    Toolkit.getDefaultToolkit().getScreenSize());


    dialog.setUndecorated(true);


    dialog.setSize(dialog.getMaximumSize());


    dialog.setModal(true);


    }


    //Singleton Pattern


    public static ScreenCapture getInstance() {


    return defaultCapturer;


    }


    /**捕捉全屏慕*/


    public Icon captureFullScreen() {



fullScreenImage = robot.createScreenCapture(new Rectangle(


    Toolkit.getDefaultToolkit().getScreenSize()));


    ImageIcon icon = new ImageIcon(fullScreenImage);


    return icon;


    }


    /**捕捉屏幕的一個矯形區域


    */


    public void captureImage() {


    fullScreenImage = robot.createScreenCapture(new Rectangle(


    Toolkit.getDefaultToolkit().getScreenSize()));


    ImageIcon icon = new ImageIcon(fullScreenImage);


    labFullScreenImage.setIcon(icon);


    dialog.setVisible(true);


    }


    /**得到捕捉後的BufferedImage*/


    public BufferedImage getPickedImage() {


    return pickedImage;


    }


    /**得到捕捉後的Icon*/


    public ImageIcon getPickedIcon() {


    return new ImageIcon(getPickedImage());


    }


    /**儲存為一個文件,為PNG格式


    *@deprecated


    *replaced by saveAsPNG(File file)


    **/


    @Deprecated


    public void saveToFile(File file) throws IOException{


    ImageIO.write(getPickedImage(),defaultImageFormater,file);


    }


    /**儲存為一個文件,為PNG格式*/


    public void saveAsPNG(File file) throws IOException {


    ImageIO.write(getPickedImage(),”png”,file);


    }


    /**儲存為一個JPEG格式圖像文件*/


    public void saveAsJPEG(File file) throws IOException {


    ImageIO.write(getPickedImage(),”JPEG”,file);


    }


    /**寫入一個OutputStream*/


    public void write(OutputStream out) throws IOException{


    ImageIO.write(getPickedImage(),defaultImageFormater,out);


    }


    //singleton design pattern


    private static ScreenCapture defaultCapturer = new ScreenCapture();


    private int x1,y1,x2,y2;


    private int recX,recY,recH,recW; //截取的圖像


    private boolean isFirstPoint = true;


    private BackgroundImage labFullScreenImage = new BackgroundImage();


    private Robot robot;


    private BufferedImage fullScreenImage;


    private BufferedImage pickedImage;


 &nb

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *