無需讀取檔案,Java 即可純代碼生成圖像。BufferedImage 提供記憶體內像素緩衝區,支援多種色彩模型與 Alpha 透明通道,是動態繪圖、圖像合成、驗證碼生成、圖表繪製的核心工具。
int width = 200, height = 300;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
// TYPE_INT_ARGB:每像素 32 位元,含 Alpha + RGB,最通用
Graphics2D g2d = image.createGraphics();
// 設定抗鋸齒、描繪屬性、仿射變換等
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 讀取單像素 (ARGB 打包 int)
int argb = image.getRGB(x, y);
int alpha = (argb >> 24) & 0xFF;
int red = (argb >> 16) & 0xFF;
int green = (argb >> 8) & 0xFF;
int blue = argb & 0xFF;
// 寫入單像素
image.setRGB(x, y, (alpha << 24) | (red << 16) | (green << 8) | blue);
// 批次讀寫
int[] pixels = image.getRGB(0, 0, width, height, null, 0, width);
image.setRGB(0, 0, width, height, pixels, 0, width);
public class ImageDrawDemo extends JApplet {
BufferedImage offscreen; // 雙緩衝離屏圖像
Thread animator;
volatile boolean running;
public void init() {
offscreen = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
// 載入背景 Logo 等靜態資源
}
public void start() {
running = true;
animator = new Thread(() -> {
while (running) {
updateFrame();
repaint(); // 觸發 paint()
try { Thread.sleep(30); } catch (InterruptedException ignored) {}
}
});
animator.start();
}
public void stop() { running = false; }
void updateFrame() {
Graphics2D g = offscreen.createGraphics();
// 清背景、繪製動態圖形、合成 Logo、套用透明度漸變等
g.dispose();
}
public void paint(Graphics g) {
g.drawImage(offscreen, 0, 0, this); // 雙緩衝輸出,無閃爍
}
}
BufferedImage 讓 Java 擁有類似 C 語言直接操作顯存的能力,是客製化視覺元件、遊戲引擎原型、科學視覺化的利器。