drawImage zu langsam

Sladda

Mitglied
Hallo!
Ich habe folgendes Problemchen:

Ich habe eine Methode, die ein Hintergrundbild auf ein JFrame legt (1024x768) und zwar et wa so:

Code:
.
.
.
try {
   backgroundImage = this.getToolkit().getImage("pics/hintergrund.jpg");
   MediaTracker mt = new MediaTracker(this);
   mt.addImage(backgroundImage, 2);
   mt.waitForAll();
} catch...

Container c = new Container(){
   public void paint(Graphics g){
      g.drawImage(backgroundImage,0,0,this);			
      super.paint(g);
  }
};
.
.
.
Eine zweite Methode die danach aufgerufen wird soll einen Splashscreen erstellen, dazu macht sie per Robot ein Capture vom Hintergrund (was ja bereits mein backgroundImage SEIN SOLLTE), legt dieses capture auf nen JDialog und ober dieses capture-Bild ein eigenes png was ein bischen transparent ist, sodass ein toller transparenter (login-)Dialog erscheinen sollte.

Jetzt kommts: manchmal funktioniert das wunderbar, manchmal macht aber der Robot ein capture von meinem eclipse (was unter dem backgroundImage ist), sodass es aussieht als würde eclipse durchscheinen.

Da ja der Robot erst nach dem drawImage gestartet wird, gehe ich davon aus, dass drawImage einfach unglaublich langsam ist ?!

Kann ich da irgendwas machen ? Gibts ne möglichkeit zu warten bis das (background-) Image komplett gezeichnet wurde und dann erst mit dem Programm weiter fortzufahren ?
Oder hat das eine andere Ursache ?

Vielen Dank für Eure Mühe
mfg
Sladda
 
Hallo Sladda.
Zufällig hatte ich mal eine Vorlesung diesbezüglich. Ausprobiert habe ich es selbst nicht, aber theoretisch sollte dein programm dann vor dem fortfahren auf das fertig laden des Bildes warten.


Methode zum Laden des BufferedImages:

public BufferedImage loadImage(String bildName, Component c){
Image bild = getToolkit().getImage(bildName);
waitForImage(bild,c); // Methode (siehe nächste Folie)
BufferedImage bi = new BufferedImage(bild.getWidth(this),
bild.getHeight(this),
BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bi.createGraphics();
g2d.drawImage(bild,0,0,c); // male das Image auf das BImage
return bi;
}





Warten auf Laden vom Bild:

public void waitForImage(Image i, Component c){
try {
MediaTracker mt = new MediaTracker(c);
mt.addImage(i, 0);
try {
//Warten, bis das Image geladen ist
mt.waitForAll();
} catch (InterruptedException e) {
System.err.println(e.toString());
}
} catch (Exception e) {
System.err.println(e.toString());
}}
 
Zuletzt bearbeitet:
Hi!
Also, erstmal vielen Dank fürs Antworten.

@ Thomas: g.drawImage(backgroundImage,0,0,null); brachte leider keinen Erfolg.

Die Variante von Inkog werde ich gleich probieren, sieht ja sehr spannend aus :)

Mein jetziges Workaround sieht übrigens so aus, dass ich nach dem drawImage nen Thread.sleep(100) reinhaue. seit dem keine Probleme mehr. (aber schön find ichs ned)
Das einziges was ich mich nur die ganze Zeit frage: startet drawImage nen neuen Thread und zeichnet dann !? Ich sehe keine andere Erklärung... !

Viele Grüße
Chris
 
Zurück