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。java.awt.headless=false 或改用桌面專用截圖工具(如 gnome-screenshot)。此工具類適合自動化測試、錯誤回報截圖、桌面記錄等輕量級場景。若需錄製影片或高幀率捕獲,請考慮使用 Xuggler、FFmpeg 等專業媒體庫。