Hallo zusammen,
ich benutze ein BufferedImage, dass in der repaintComponent-Methode auf den Bildschirm gemalt wird.
Eben habe ich gelesen, dass man den Berech, der "beschädigt" wurde abfragen kann und dann nur das neuzeichnen zu braucht.
Ich hab jetzt mehrere Umsetzungen ausprobiert, bin mir aber nicht sicher, welche am besten / performantesten ist.
Also hier mal die 2 Möglichkeiten die ich versucht habe (vermutlich gibt es auch noch mehr):
Frage hierzu: diese überladene Methode von DrawImage führt ja eigentlich eine on-the-fly-Skalierung durch.
Kann man davon ausgehen, dass, wenn die Größe genau stimmt, diese Skalierung weggelassen wird und es schnell geht?
Dann noch die zweite Möglichkeit mit SubImage:
Welche Möglichkeit meint ihr ist schneller / besser?
So und jetzt noch was:
Euch ist evtl. aufgefallen, dass ich den aufruf von
weggelassen hab.
Scheint auch nicht weiter schlimm zu sein.
Was sind die Vor- und Nachteile von diesem Aufruf?
Sollte man den besser drin lassen, oder ist das okay, den wegzunehmen?
Edit:
Und nochwas
Ich hab bei einigen Codes gesehen, dass vor dem aufruf von drawImage g in Graphics2D gecastet wurde.
Ich vermute, dass das überhaupt nichts bringt, wenn man danach nur drawImage aufruft und keine Methoden die durch Graphics2D hinzugekommen sind.
Ist meine Vermutung richtig, oder wurde evtl. drawImage überschrieben?
ich benutze ein BufferedImage, dass in der repaintComponent-Methode auf den Bildschirm gemalt wird.
Eben habe ich gelesen, dass man den Berech, der "beschädigt" wurde abfragen kann und dann nur das neuzeichnen zu braucht.
Ich hab jetzt mehrere Umsetzungen ausprobiert, bin mir aber nicht sicher, welche am besten / performantesten ist.
Also hier mal die 2 Möglichkeiten die ich versucht habe (vermutlich gibt es auch noch mehr):
Java:
protected void paintComponent(Graphics g)
{
Rectangle rect = g.getClipBounds();
int x0 = rect.x;
int x1 = rect.x + rect.width;
int y0 = rect.y;
int y1 = rect.y + rect.height;
g.drawImage(img, x0, y0, x1, y1, x0, y0, x1, y1, null);
}
Kann man davon ausgehen, dass, wenn die Größe genau stimmt, diese Skalierung weggelassen wird und es schnell geht?
Dann noch die zweite Möglichkeit mit SubImage:
Java:
protected void paintComponent(Graphics g)
{
Rectangle rect = g.getClipBounds();
BufferedImage localImage = img.getSubimage(rect.x, rect.y, rect.width,
rect.height);
g.drawImage(localImage, rect.x, rect.y, null);
}
Welche Möglichkeit meint ihr ist schneller / besser?
So und jetzt noch was:
Euch ist evtl. aufgefallen, dass ich den aufruf von
Java:
super.paintComponent(g);
Scheint auch nicht weiter schlimm zu sein.
Was sind die Vor- und Nachteile von diesem Aufruf?
Sollte man den besser drin lassen, oder ist das okay, den wegzunehmen?
Edit:
Und nochwas
Ich hab bei einigen Codes gesehen, dass vor dem aufruf von drawImage g in Graphics2D gecastet wurde.
Ich vermute, dass das überhaupt nichts bringt, wenn man danach nur drawImage aufruft und keine Methoden die durch Graphics2D hinzugekommen sind.
Ist meine Vermutung richtig, oder wurde evtl. drawImage überschrieben?
Zuletzt bearbeitet: