JFrame -> Bild einbleden mithilfe Transparenz

CeanAc36

Grünschnabel
Hallo,

zuerst einmal: Bin ein ziemlicher Neuling, da ich mit deutschen Bibliotheken (sum) angefangen habe Java zu lernen und jetzt langsam auf das Original umstelle.

-----------

Habe ein JFrame, auf dem ich ein komplett schwarzes Hintergrundbild erzeuge (800x800). Jetzt möchte ich ein zweites Bild (erst völlig transparent dann langsam undiurchsichtig werdend) einblenden lassen.

(Beispielbilder)
duke.gif

->
img-mask.jpg


Hier der Codeabschnitt von http://www.javalobby.org:
Java:
public static BufferedImage loadTranslucentImage(String url, float transperancy) {  
        // Load the image  
        BufferedImage loaded = loadImage(url);  
        // Create the image using the   
        BufferedImage aimg = new BufferedImage(loaded.getWidth(), loaded.getHeight(), BufferedImage.TRANSLUCENT);  
        // Get the images graphics  
        Graphics2D g = aimg.createGraphics();  
        // Set the Graphics composite to Alpha  
        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transperancy));  
        // Draw the LOADED img into the prepared reciver image  
        g.drawImage(loaded, null, 0, 0);  
        // let go of all system resources in this Graphics  
        g.dispose();  
        // Return the image  
        return aimg;  
    }

Hierbei habe ich ein kleines Problem: Wie kann ich es hinbekommen dass das schwarze Hintergrundbild noch angezeigt wird, wenn dass andere Bild tranparent wird? Im Moment erscheint bei mir wie im Beispiel das graue JFrame :/

Meine Methoden im "Hauptprogramm":

Java:
public class Hauptprogramm
{  
    public void backgroundImage(JFrame frame, String ref)
    {
        ImageUtility ImageUtil = new ImageUtility();
        BufferedImage loadImg = ImageUtil.loadImage(ref);   
        JImagePanel panel = new JImagePanel(loadImg, 0, 0);  
        frame.add(panel); 
    }
    
    public void loadAndDisplayImage(JFrame frame, float x) 
    {  
        ImageUtility ImageUtil = new ImageUtility();
        BufferedImage loadImg = ImageUtil.loadTranslucentImage("Unbenannt1.gif", x);   
        JImagePanel panel = new JImagePanel(loadImg, 0, 0);  
        frame.add(panel);
    }
    
    public static void main(String[] args) 
    {  
        ImageApp ia = new ImageApp();  
        JFrame frame = new JFrame("Excelsius");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(0, 0, 800, 800);
        frame.setResizable(false);
        for (float i = 0.0F; i < 0.0F; i = i + 0.05F)
        {
            ia.backgroundImage(frame,"schwarz.jpg");
            ia.loadAndDisplayImage(frame, i); 
            frame.setVisible(true); 
        }
    }
    
}

Die import-Anweisungen habe ich rausgelassen.



Gibt es eine Möglichkeit den grauen Hintergrund des JFrames dauerhaft [ins schwarze] zu ändern, oder das das Hintergrundbild unverändert sichtbar bleibt und [im Vordergrund] das zweite Bild ein-/ ausgeblendet wird?


Danke im Vorraus! :D

CeanAc36
 
Zuletzt bearbeitet:
Hi
1. die Java-Code-Tags erleichtern die Lesbarkeit (siehe meine Signatur).

2. Ich würde kein eigenes BufferedImage erzeugen und dieses jedes mal neu füllen, sondern die paintComponent()-Methode deines JPanels überschreiben. Der Grund dafür ist simpel: das verbraucht unnötig Speicher und Rechenlast! Du solltest per Timer regelmäßig (z.B. alle 25ms) eine Variable in dieser Klasse erhöhen (Transparenz) und danach repaint() aufrufen. Die paintComponent()-Methode sollte dann in Abhängigkeit von diesem Transparenzwert das 2. Bild intensiver/schwächer zeichnen.
 
Zurück