Heim  >  Artikel  >  Java  >  Wie zeichnet man in Java dauerhafte Rechtecke ohne Leistungsprobleme?

Wie zeichnet man in Java dauerhafte Rechtecke ohne Leistungsprobleme?

DDD
DDDOriginal
2024-10-28 07:59:30823Durchsuche

How to Draw Persistent Rectangles in Java without Performance Issues?

Zeichnen von Rechtecken, die in Java bestehen bleiben

Problem:
In Java wird ein JPanel zum Zeichnen von Rechtecken erstellt die über einen einzigen Lackierzyklus hinaus bestehen bleiben, stellen Herausforderungen dar. Der übliche Ansatz, eine Liste von Rechtecken zu verwalten und bei jedem Malaufruf alles neu zu zeichnen, kann die Leistung verlangsamen, wenn die Anzahl der Rechtecke erheblich ist.

Traditioneller Ansatz:
Eine traditionelle Lösung beinhaltet die Verwendung repaint(x, y, height, width), um nur den Bereich neu zu zeichnen, in dem das neue Rechteck gezeichnet wird. Dies schlägt jedoch häufig fehl, da das JPanel immer wieder vorherige Rechtecke löscht.

Alternative Lösung – Verwendung eines BufferedImage:
Ein alternativer Ansatz besteht darin, ein BufferedImage als Malfläche zu verwenden. So funktioniert es:

  1. Erstellen Sie ein BufferedImage und verwenden Sie es als Leinwand zum Zeichnen.
  2. Erstellen Sie einen Verweis auf das ursprüngliche BufferedImage zur späteren Verwendung.
  3. Erstellen Bildverarbeitungswerkzeuge zum Zeichnen, Auswählen und Bearbeiten des Bilds.
  4. Zeichnen oder bearbeiten Sie innerhalb der Malmethode das BufferedImage, anstatt auf die Komponente zu zeichnen.

Vorteile der Verwendung eines BufferedImage:
Die Verwendung eines BufferedImage zum Zeichnen bietet mehrere Vorteile:

  • Es stellt eine dedizierte Maloberfläche bereit, die zwischen Malzyklen bestehen bleibt.
  • Es ermöglicht Präzisere Kontrolle darüber, welche Bereiche neu gestrichen werden müssen, wodurch die Leistung verbessert wird.
  • Es ermöglicht die Verwendung fortschrittlicher Bildverarbeitungstechniken.

Beispielimplementierung:

Betrachten Sie den folgenden Codeausschnitt, der den oben genannten Ansatz demonstriert:

<code class="java">import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

public class RectangleDrawer {
    private BufferedImage canvas;
    private BufferedImage originalCanvas;

    public void drawRectangle(int x, int y, int width, int height, Color color) {
        Graphics2D g = canvas.createGraphics();
        g.setColor(color);
        g.fillRect(x, y, width, height);
        g.dispose();
    }

    public void repaint() {
        g.drawImage(canvas, 0, 0, null);
    }

    // Other methods for drawing, selecting, and manipulating the image
    // would go here.
}</code>

In diesem Beispiel verwendet die Klasse „RectangleDrawer“ ein BufferedImage namens „canvas“, um Rechtecke zu zeichnen. Die originalCanvas wird verwendet, um bei Bedarf das Originalbild wiederherzustellen.

Die Methode drawRectangle verwendet ein Graphics2D-Objekt, um das Rechteck auf der Leinwand zu zeichnen, und die Methode repaint verwendet die Methode drawImage, um die Anzeige der Komponente basierend auf der geänderten Leinwand zu aktualisieren.

Durch die Verwendung eines BufferedImage auf diese Weise können Rechtecke gezeichnet und angezeigt werden, ohne dass sie in nachfolgenden Malzyklen gelöscht werden, wodurch das ursprüngliche Problem behoben wird.

Das obige ist der detaillierte Inhalt vonWie zeichnet man in Java dauerhafte Rechtecke ohne Leistungsprobleme?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn