Doppelpufferung

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
ich habe das bis jetzt noch nicht ganz verstanden.

Code:
public void update(Graphics g){
       // dbImage = Image-Objekt     dbg = Graphics-Objekt
      // Initialisierung des DoubleBuffers
      if (dbImage == null)
      {
        dbImage = createImage (this.getSize().width, this.getSize().height);
        dbg = dbImage.getGraphics ();

      }

     // Bildschirm im Hintergrund löschen
     dbg.setColor (getBackground ());
     dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

     // Auf gelöschten Hintergrund Vordergrund zeichnen
     dbg.setColor (getForeground());
     paint (dbg);

     // Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
     g.drawImage (dbImage, 0, 0, this);
    }

Erzeugt das createImage ein leeres Bild mit der angegebenen Größe? Falls ja, warum wird dann noch am Schluß noch mit g.drawImage das Image gezeichnet?

Liebe Grüße
Reality
 
B

Beni

Gast
Zuerst wird auf das Bild dbImage gezeichnet (mit paint(dbg)), danach wird dieses Bild auf die Component gezeichnet (mit g.drawImage(...)). Der Witz dabei: alles was auf der Component ist, wird sofort durch das neue Bild ersetzt, ohne dass die Component zuerst "gesäubert" werden müsste (genau dieses "Säubern", also das komplette Überzeichnen der Component mit einer neutralen Farbe, ist für das Flimmern verantwortlich, dass man manchmal sieht).

P.S. anstelle von "createImage" könnte man "createVolatileImage" verwenden, dann kriegt man Hardwareunterstützung :wink:
 

Reality

Top Contributor
Hi Beni,
danke! :)
Aber an einer Stelle muss ich dir widersprechen:
Beni hat gesagt.:
P.S. anstelle von "createImage" könnte man "createVolatileImage" verwenden, dann kriegt man Hardwareunterstützung :wink:

....
However, a few issues will keep your image from being accelerated:

- If you constantly change the contents of the image (for example, drawing graphics primitves into the image), the image won`t be accelerated. (Was bei mir ja auch der Fall ist, oder nicht?)

- As of Java SDK 1.4.1 translucent image aren`t accelerated. Only opaque and transparent images are accelerated. Because of this, translucent images are used sparingly in this book.

- Not every System has accelerated image capability

Liebe Grüße
Reality
 
B

Beni

Gast
Hm, gute Argumente.

Aber ein Versuch ists allemal wert :wink:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben