Halbtransparentes Image

sven-ber

Grünschnabel
Hallo zusammen,

Ich habe zwei Images gegeben, die die selbe Größe haben und jeweils in ein JLabel gepackt werden.

Ich möchte gerne die beiden Images exakt über einander legen. Das zweite Image, welches über dem ersten Image liegt, soll halb transparent sein. Sodass das untere Bild durch scheint.

Kann mir einer vlt einen Tipp geben wie das geht?

Vielen Danke

sven-ber
 
JLabel ableiten und paintComponent() überschreiben...


etwas in der Art:

Java:
public void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D graph2D = (Graphics2D) g;

 graph2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
  if(bild1!= null) g.drawImage(bild1, 0, 0, this);
 graph2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
  if(bild2!= null)  g.drawImage(bild2, 0, 0, this);
}

Gruss
.bile
 
Hallo Bile,
danke für deine Antwort. Ich habe gerade mal versucht das umzusetzen was du geschickt hast.

Die Methode sieht jetzt so aus:
Code:
public void cropImageRight(int x, int y) {
        int startX = x - 15;
        int startY = y - 15;

        ImageIcon icon = new ImageIcon(this.secondPicture.getAbsolutePath());
        Image image = icon.getImage();
        image = createImage(new FilteredImageSource(image.getSource(),
                                                    new CropImageFilter(startX,
                                                                        startY,
                                                                        30, 30)));      

        Image b = image.getScaledInstance(100, 100, Image.SCALE_SMOOTH);
        
        BufferedImage bi2 = new BufferedImage(100, 100, Transparency.TRANSLUCENT);
		Graphics2D bg2 = (Graphics2D) bi2.createGraphics();
		
		bg2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
		bg2.drawImage(b, 0, 0, null);
		bg2.dispose();
        
        
        subBildRechts.setIcon(new ImageIcon(bi2));
     
    }
Die Methode nimmt sich ein Bild und schneidet daraus an einer bestimmten Stelle ein Teilbild aus. Dieses wird vergrößert. Im nächsten Schritt soll das Bild halbtransparent gezeichnet werden. Dazu habe ich dein Code genommen und etwas angepasst. Zum Schluss wird das Bild in ein JLabel gepackt und in meinem Layout eingebunden.

Allerdings hat das nicht so funktioniert wie ich mir das vorgestellt habe. Aus irgendeinem Grund geht das Bild verloren. Es wird ein leeren JLabel angezeigt. Habe ich einen Denkfehler?
 
Jup, du hast ja gar keine eigene Ableitung von JLabel gemacht und deren paintComoponent()-Funktion überschrieben... Hier mal n Beispiel. Ich mache ein JFrame auf und füge dem myLabel hinzu, eine Ableitung von JLabel... und wenn der den Zeichenbefehl erhält, dann zeichnet er genau das gewünschte ;-)



Java:
import java.awt.AlphaComposite;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Start {

	public static void main(String[] args) {
		new Start();
	}
	
	public Start() {
		JFrame frame = new JFrame("Huhn");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		frame.getContentPane().add(new HuhnLabel());
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
	
	private class HuhnLabel extends JLabel {

		public HuhnLabel() {
			this.setPreferredSize(new Dimension(100, 100));
		}
		
		private Image bild1 = (new ImageIcon("gras.gif")).getImage();
		private Image bild2 = (new ImageIcon("huhn.gif")).getImage();
		
		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			Graphics2D graph2D = (Graphics2D) g;
			 
			 graph2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
			  if(bild1!= null) g.drawImage(bild1, 0, 0, this);
			 graph2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
			  if(bild2!= null)  g.drawImage(bild2, 0, 0, this);
		}
	}
}
 

Neue Beiträge

Zurück