ホームページ >Java >&#&チュートリアル >Java で絶えず変化するグラフィックスを効率的に描画するにはどうすればよいですか?

Java で絶えず変化するグラフィックスを効率的に描画するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-23 21:05:12620ブラウズ

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;
    //...

ピクセルの一括取得

元のコードは、ピクセルの色を一度に 1 つずつ取得しました。 robot.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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。