Fading Effekt (:D)

Status
Nicht offen für weitere Antworten.

Rex

Bekanntes Mitglied
Liebe Freunde,

mittels
Code:
  try {
         img = getImage(new URL(showurl));
         setImage(img);
      }
      catch (MalformedURLException e) {
         e.printStackTrace();
      }

      }
      catch (Exception e) {
      }
und
Code:
public void setImage(Image img) {
      this.img = img;
      repaint();
   }

   public void paint(Graphics g) {
      if(img != null) {
         g.drawImage(img, 0, 0, this);
      }
   }

wird ja in meinem Applet ein Bild angezeigt.
Soweit - so gut.
Nun möchte ich aber, dass das Bild langsam eingeblendet (gefadet) wird.
Natürlich kann man das in Java :D

Aber WIE?

Vielen Dank!
MFG
Rex
 

André Uhres

Top Contributor
Rex hat gesagt.:
..Nun möchte ich aber, dass das Bild langsam eingeblendet (gefadet) wird..
In einem Thread eine Schleife einbauen die den alpha-Wert nach und nach verändert:
Code:
Graphics2D g2d = (Graphics2D) g;
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
 

L-ectron-X

Gesperrter Benutzer
Wenn du das mit einem Applet machen willst, empfehle ich dir, das Laden der Bilder mit einem MediaTracker zu überwachen, sonst könnte es passieren, dass bei einer langsamen Internetverbindung, oder einem recht großen Bild, das Einblenden nicht oder nur zum Teil funktioniert.
 

Rex

Bekanntes Mitglied
Ehm...
Code:
       MediaTracker mt = new MediaTracker(this);
                Image pic = getImage(new URL(showurl));
                pic.getScaledInstance(Applet.WIDTH, Applet.HEIGHT, pic.SCALE_SMOOTH);
                img = img.getGraphics().drawImage(pic, 0, 0, this);

                
                mt.addImage(img, 9);
                setImage(img);

bei img.getGraphics() sagt der Compiler mir
"incompatible types found: boolean - required: java.awt.image.BufferedImage"

:(

Weiß jemand, wie ich das lösen kann?
Vielen Dank!
MFG
Rex
 

dieta

Top Contributor
Der Fehler liegt da:
Code:
img = img.getGraphics().drawImage(pic, 0, 0, this);

Du versuchst dort, dem BufferedImage img den Rückgabewert der Methode "drawImage" zuzuweisen.

So müsste es funktionieren:
Code:
Graphics imgGraphics = img.getGraphics();
imgGraphics.drawImage(pic, 0, 0, this);
imgGraphics.dispose();
oder so:
Code:
img.getGraphics().drawImage(pic, 0, 0, this);
 

Rex

Bekanntes Mitglied
Noch mal eine Frage:

Code:
    public void setImage(BufferedImage img) {
        this.img = img;
        repaint();
    }
    
    public void paint(Graphics g) {
        if(img != null) {
            g.drawImage(img, 0, 0, this);
        }
    }

Code:
 MediaTracker mt = new MediaTracker(this);
                Image pic = getImage(new URL(showurl));
                pic.getScaledInstance(Applet.WIDTH, Applet.HEIGHT, pic.SCALE_SMOOTH);
                img.getGraphics().drawImage(pic, 0, 0, this); 
                
                mt.addImage(img, 9);
                setImage(img);

Aber es hagelt Fehler, wenn ich das versuche.
WOran liegt's?

Vielen Dank!
MFG
Rex
 

Rex

Bekanntes Mitglied
Laufzeitfehler:
at DFApplet$1.drop(DFApplet.java:45)
at java.awt.dnd.DropTarget.drop(DropTarget.java:430)
at sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:500)
at sun.awt.dnd.SunDropTargetContextPeer.access$800(SunDropTargetContextPeer.java:53)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:812)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:736)
at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:29)
at java.awt.Component.dispatchEventImpl(Component.java:3826)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Vielen Dank!
MFG
Rex
 

Leroy42

Top Contributor
at DFApplet$1.drop(DFApplet.java:45)

Na immerhin wissen wir, daß in der Zeile 45 deines Programms
eine Exception geworfen wurde. Bleibt noch zu klären:

1) Was steht in Zeile 45 (und dort herum)
2) Was für eine Exception wurde geworfen. Das steht unmittelbar vor der, von mir kopierten Zeile.
 

Rex

Bekanntes Mitglied
Zeile 45: processFile((File) a.get(i));
Fehlerzeile :D
Das war vorher nicht.

Ehm.. die Bildanzeige findet indeed in der Function processFile statt.
MFG
Rex
 

Leroy42

Top Contributor
Rex hat gesagt.:
Ehm.. die Bildanzeige findet indeed in der Function processFile statt.
aber soweit kommt er eben nicht:

a.get(i) liefert eben keine Instanz der Klasse File zurück.

Schreib' doch mal

Code:
System.out.println(a.get(i).getClass().getName());

anstelle von

Code:
processFile((File) a.get(i));

und schau dir in der Java-Konsole an, was für ein Object du eigentlich hast.
 

Leroy42

Top Contributor
Merkwürdig. ???:L

Poste doch mal die gesamte Fehlermeldung;
mit der Exception und den ersten drei at-Zeilen
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben