Java-und ausblenden von Bildern
Ich versuche zu lernen, wie fade in und out Bilder in ein anderes Bild oder aus einem anderen Bild. Also, wenn ich 2 Bilder und 1 angezeigt wird, im moment möchte ich die Anzeige ein anderes Bild in den hintergrund und verblassen das erste Bild in der 2. Abbildung. ODER, ich möchte den Fokus auf das neue Bild und langsam verblassen im Laufe der 1. Bild, dann stoppen Sie die Anzeige der 1. ein.
Ich bin mir nicht sicher, wie Sie Sie:
- Fokus festlegen, wenn Sie sogar notwendig.
- Kann ich fade in, wenn ich die alpha auf 0 und die Schrittweite und ziehen nur ein Bild, aber ich kann es nicht ausblenden entweder mit Abweichungen von diesem Kodex. (d.h. auskommentieren ein Bild zu zeichnen).
Edit: Wirklich, alles was ich bin besorgt über Lage, 2 Bilder, und stellen Sie das Bild, das aktuell angezeigt wird, verschwindet langsam in das 2. Bild. Wie, was erreicht ist, nicht mit diesem.
Hier ist ein Codebeispiel, ich bin Herumspielen mit:
import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class FadeIn extends JPanel implements ActionListener {
private Image imagem;
private Image image2;
private Timer timer;
private float alpha = 1f;
public FadeIn() {
imagem = (new ImageIcon(getClass().getResource(
"/resources/1stImage.jpg"))).getImage();
image2 = (new ImageIcon(getClass().getResource(
"/resources/2ndImage.jpg"))).getImage();
timer = new Timer(20, this);
timer.start();
}
//here you define alpha 0f to 1f
public FadeIn(float alpha) {
imagem = (new ImageIcon(getClass().getResource(
"/resources/1stImage.jpg"))).getImage();
this.alpha = alpha;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(imagem, 0, 0, 400, 300, null);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
alpha));
g2d.drawImage(image2, 0, 0, 400, 300, null);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Fade out");
frame.add(new FadeIn());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(420, 330);
//frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
alpha += -0.01f;
if (alpha <= 0) {
alpha = 0;
timer.stop();
}
repaint();
}
}
Im Grunde zeichnen Sie ein Bild in den hintergrund, und ein weiterer davor. Dann verblassen die top-Bild unter Verwendung der timer. Statt einem weißen hintergrund, es wäre das untere Bild. Ich habe in der Lage, es zu tun, wenn ich die füllen Sie einfach ein Rechteck auf dem Bildschirm, aber ich kann nicht das Bild in den hintergrund.
InformationsquelleAutor user2079828 | 2013-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Grunde, was dieser tut, ist, verwenden Sie die gleichen alpha-Wert, das einblenden von 0-1 und dann mit dem gleichen alpha, von 1-0, so dass die beiden Bilder zu überblenden sich gegenseitig über die...
Die Magie im Grunde passiert in den
paintComponent
, wo das Bild kommen mit deralpha
Wert und das ausgehende Bild verwendet1f - alpha
.Umschaltung zwischen den beiden Bilder ist eigentlich der gleiche Prozess, erwarten Sie die
inImage
ist gegen dieoutImage
Das timing ist etwas anders. Anstatt einer geraden Bewegung von
0-1
mit einem standard-delta (ie0.01
zum Beispiel), diese verwendet einen zeitbasierten Algorithmus.Ist, benutze ich einen timer, die Zecken, die sich alle 40 Millisekunden oder so, es führt eine Berechnung basierend auf der Höhe der Zeit die timer werden ausgeführt und berechnet die
alpha
Wert entsprechend...Dies ermöglicht Ihnen, ändern Sie die Menge der Zeit, die die animation, sondern bietet auch einen etwas besseren Algorithmus berücksichtigt, dass die passive Natur der Schaukel-rendering-engine...
Sie können dies mit einer geraden delta, ich finde einfach eine Uhrzeit ein stellt ein besseres Ergebnis 😉
Haha, na du mehr Erfahrung als ich bin, so nehme ich Ihr Wort für es :p ich habe diese perfekt funktioniert, nachdem ich herausgefunden, wie man ein Bild laden von Ressourcen mit dem ImageIO.Lesen. Ich hatte früher nie ein BufferedImage vor. Würde diese Arbeit mit einem Flugzeug alte 'Bild' - Typ?
BufferedImage
erstrecktImage
, so sollte es...Froh, dass es geholfen hat 😉 - ich in der Regel eine animation, die Bibliothek zu dieser Art von Arbeit. Ich persönlich verwende die TimingFramework aber Trident ist sehr ähnlich und die Java-Universal Tween Engine sieht interessant aus.
InformationsquelleAutor MadProgrammer