Bildfadeffekt (Halptransparenz)

Status
Nicht offen für weitere Antworten.

blackfeet

Mitglied
Hi,
Ich habe versucht einen fade Effekt (Bild anfangs transparent wird immer undurchsichtiger) zu machen.
Es ist mir auch ganz gut gelungen, bis auf ein paar Kleinigkeiten.

Code:
import java.applet.Applet;
import java.awt.*;

public class Fader extends Applet {

	public void init(){
		this.setBackground(Color.white);
	}

	public void render(Image img, Graphics2D g2,float trans){
		AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, trans);
		g2.setComposite(ac);
		g2.drawImage(img,50,50,this);
	}
	
	public void paint(Graphics g){
		g.setColor(Color.white);
		Image img = Toolkit.getDefaultToolkit().getImage("bild1.jpg");
		for(float i = 0; i<20; i++){
			render(img, (Graphics2D) this.getGraphics(), i/20);
			try{
				Thread.sleep(100);
			}catch(Exception e){}
		}
	}
}

So das ist mal der Code. Nun meine Frage:
Das Bild fadet, zwar aber natürlich ist das ganze nicht richtig, da das untere Bild ja immer wieder "übermalt" wird.
Eigentlich soll es immer neu gezeichnet soll.
Wenn ich jetz immer mit einem Viereck mit der Hintergrundfarbe übermale flakkert es erwartungsgemäß enorm.
Hat da villeicht jemand eine Ahnung wie ich das lösen könnte?

Achja nochwas:
Wisst ihr warum das zweimal ausgeführt wird?
Es ist zwar eigentlich egal, weil es so nicht eingesetzt wird, aber mich würds trotzdem interresieren.

thx
Blackfeet
 

Grizzly

Top Contributor
Ich würde an Deiner Stelle das Bild nur einmal laden. Momentan lädst Du es ja jedesmal von der Platte in den Speicher, wenn die Methode Update aufgerufen wird.

Dann würde ich in der Paint-Methode ein Image erstellen, alle Zeichen-Methoden darauf ausführen und dieses Bild dann ganz am Schluss zeichnen. Nennt man auch Double Buffer.

Wenn Du das ganze für bspw. eine Animation benutzen willst, würde ich mir mal die Klasse VolatileImage anschauen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben