首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使用 Java Robot 類實現螢幕截圖功能

     編輯:Java 相關知識

java.awt.Robot 類提供了底層的系統輸入控制與螢幕捕獲能力,透過 createScreenCapture() 方法可輕鬆實現全螢幕或指定區域的截圖。以下是一個封裝良好的靜態工具方法,支援將截圖直接儲存為 PNG 檔案。

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class ScreenCaptureUtil {

    /**
     * 擷取整個螢幕並儲存為 PNG 圖片
     *
     * @param fileName 輸出檔案完整路徑(含副檔名)
     * @throws AWTException  若平台不支援 Robot 操作
     * @throws IOException   寫入檔案失敗
     */
    public static void captureScreen(String fileName) throws AWTException, IOException {
        // 1. 取得螢幕尺寸
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Rectangle screenRect = new Rectangle(screenSize);

        // 2. 建立 Robot 實例並截圖
        Robot robot = new Robot();
        BufferedImage image = robot.createScreenCapture(screenRect);

        // 3. 輸出為 PNG 格式
        ImageIO.write(image, "png", new File(fileName));
    }

    // 進階用法:擷取指定區域
    public static void captureRegion(int x, int y, int width, int height, String fileName)
            throws AWTException, IOException {
        Robot robot = new Robot();
        BufferedImage image = robot.createScreenCapture(new Rectangle(x, y, width, height));
        ImageIO.write(image, "png", new File(fileName));
    }
}

關鍵點說明

  • 多螢幕環境:Toolkit.getScreenSize() 返回主螢幕尺寸;若需跨螢幕截圖,請使用 GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices() 遍歷所有裝置並合併矩形區域。
  • 效能考量:createScreenCapture 為同步阻塞呼叫,高頻截圖(如錄製影片)建議使用 javafx.scene.robot.Robot 或 JNA 調用原生 API。
  • 權限問題:部分 Linux 桌面環境(Wayland)限制 Robot 操作,需啟用 java.awt.headless=false 或改用桌面專用截圖工具(如 gnome-screenshot)。

此工具類適合自動化測試、錯誤回報截圖、桌面記錄等輕量級場景。若需錄製影片或高幀率捕獲,請考慮使用 Xuggler、FFmpeg 等專業媒體庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved