tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1405
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sladda Sladda ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    26
    Hallo!
    Ich habe folgendes Problemchen:

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

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    .
    .
    .
    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
     

  2. #2
    Sladda Sladda ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    26
    weiß keiner Rat ? * schnüff *
     

  3. #3
    Inkog Inkog ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    16
    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());
    }}
    Geändert von Inkog (29.06.07 um 19:35 Uhr)
     

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    versuchs mal mit:
    g.drawImage(backgroundImage,0,0,null);

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  5. #5
    Sladda Sladda ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    26
    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
     

Ähnliche Themen

  1. DrawingContext.DrawImage
    Von juergen1969 im Forum .NET WPF & Silverlight
    Antworten: 2
    Letzter Beitrag: 28.11.09, 11:59
  2. [c#] GDI+ ? | DrawImage
    Von Xenolith im Forum .NET Windows Forms
    Antworten: 5
    Letzter Beitrag: 25.01.09, 21:11
  3. Problem mit drawImage
    Von SCIPIO-AEMILIANUS im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 08.09.08, 06:24
  4. Problem mit PictureBox und DrawImage
    Von Die Charlie im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 14.09.07, 12:49
  5. BackgroundImage und DrawImage unterschiedlich?
    Von Eroli im Forum .NET Grafik und Sound
    Antworten: 6
    Letzter Beitrag: 05.04.07, 18:11