首頁  >  文章  >  Java  >  Java中如何有效率地繪製不斷變化的圖形?

Java中如何有效率地繪製不斷變化的圖形?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-23 21:05:12553瀏覽

How Can I Efficiently Draw Constantly Changing Graphics in Java?

如何在Java 中繪製不斷變化的圖形

在Java 中繪製不斷變化的圖形可能是一項具有挑戰性的任務,特別是當目標是平滑的動畫時和效率。讓我們深入研究一個改進的解決方案,解決原始問題中突出顯示的效能問題:

分離檢測和繪圖

初始程式碼結合了偵測像素顏色和繪圖的任務繪製圖形。分離這些過程可以提高效率。

private void setColorAt(int x, int y, Color pixelColor) {
    model[x][y] = pixelColor;
    repaint(40 + x * STEP, 45 + y * STEP, 40 + (x * STEP) - 3, 45 + (y * STEP) - 3);
}
public void paintComponent(Graphics g) {
    if (!SwingUtilities.isEventDispatchThread()) {
        throw new RuntimeException("Repaint attempt is not on event dispatch thread");
    }
    final Graphics2D g2 = (Graphics2D) g;
    //...

批次取得像素

原始程式碼一次擷取一個像素顏色。透過使用 robots.createScreenCapture(...),我們可以一次取得所有 64 個像素,從而減少開銷。

final BufferedImage capture = robot.createScreenCapture(rect);

for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
        final Color pixelColor = new Color(capture.getRGB(x, y));
        //...
    }
}

智慧剪切和線程

僅改變的像素應該重新繪製。透過使用具有特定座標的 repaint(),我們將更新限制在受影響的區域。此外,確保所有模型和視圖更新發生在事件調度執行緒上可以防止並發問題。

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        view.setColorAt(finalX, finalY, pixelColor);
    }
});

改進的程式碼展示了這些最佳化的好處,從而顯著增強了效能。

以上是Java中如何有效率地繪製不斷變化的圖形?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn