展示 Graphics.drawImage() 多種重載形式,實現圖片正常顯示、縮小繪製、水平翻轉。程式以 JFrame 為視窗,命令列參數傳入圖片路徑。
import javax.swing.*;
import java.awt.*;
class ImgDemo extends JFrame {
Image image;
ImgDemo(String filename) {
setTitle("drawImage Example");
try {
image = getToolkit().getImage(filename);
setIconImage(image);
} catch (Exception e) { e.printStackTrace(); }
setSize(600, 250);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
public void paint(Graphics g) {
Insets insets = getInsets();
int x = insets.left, y = insets.top;
int w = image.getWidth(this);
int h = image.getHeight(this);
// 1. 原尺寸繪製
g.drawImage(image, x, y, this);
// 2. 縮小 1/4 繪製 (加 1 像素邊框)
g.drawRect(x, y, w/4+1, h/4+1);
g.drawImage(image, x+1, y+1, w/4, h/4, this);
// 3. 水平翻轉 (源矩形 x 方向反轉)
g.drawImage(image, x+w, y, x+2*w, y+h, w, 0, 0, h, this);
}
public static void main(String[] args) {
if (args.length == 1) new ImgDemo(args[0]);
else System.err.println("usage: java ImgDemo image-file");
}
}
drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer):將來源矩形 (sx1,sy1)-(sx2,sy2) 映射到目標矩形 (dx1,dy1)-(dx2,dy2)。若 sx1 > sx2 則產生水平翻轉效果。this (實作 ImageObserver) 讓元件在圖片非同步載入完成時自動重繪。應用場景:遊戲角色朝向切換、縮圖預覽、鏡像效果等。