在 Java 桌面應用開發中,圖片裁剪是常見需求。本文將完整示範如何利用 Swing 元件與 Robot 類別,實現滑鼠拖曳選取區域並將裁剪結果儲存為圖檔的功能。
JFrame 視窗中MouseListener 與 MouseMotionListener 捕捉滑鼠拖曳事件Robot.createScreenCapture() 進行螢幕區域截圖ImageIO 將截圖儲存為 JPG 格式| 類別 | 用途 |
|---|---|
Graphics | 繪製選取矩形框 |
Rectangle | 定義裁剪區域範圍 |
Robot | 執行螢幕截圖操作 |
BufferedImage | 記憶體中處理圖像資料 |
ImageIO | 圖檔讀寫(支援 PNG/JPG) |
JFrame | 提供顯示視窗容器 |
CropImagepublic class CropImage extends JFrame implements MouseListener, MouseMotionListener {
int drag_status = 0, c1, c2, c3, c4;
public static void main(String[] args) {
new CropImage().start();
}
public void start() {
ImagePanel im = new ImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg");
add(im);
setSize(400, 400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
// ... 滑鼠事件處理與 paint 方法
}
mousePressed:記錄起始座標 (c1, c2)mouseDragged:更新結束座標 (c3, c4),設定 drag_status=1,觸發重繪mouseReleased:確認選取完成,呼叫 draggedScreen() 執行裁剪儲存paint:根據座標計算寬高,繪製即時選取框public void draggedScreen() throws Exception {
int w = Math.abs(c1 - c3);
int h = Math.abs(c2 - c4);
Robot robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2, w, h));
File save_path = new File("screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("裁剪圖片儲存成功。");
}
ImagePanelclass ImagePanel extends JPanel {
private Image img;
public ImagePanel(String path) {
this(new ImageIcon(path).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
@Override
protected void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
}
完整原始碼包含兩個檔案:ImagePanel.java 與 CropImage.java,已於上方分段展示。實際部署時請確認圖片路徑正確,並注意 Robot 類別需在具備圖形介面環境下執行。
Robot 擷取的是螢幕絕對座標,若視窗有邊框或標題列,需扣除偏移量Robot 權限本範例展示了 Java AWT/Swing 結合 Robot 類別實現互動式圖片裁剪的完整流程。掌握滑鼠事件處理、即時繪製與螢幕截圖三大核心技術,即可輕鬆建立客製化圖片編輯工具。