Transparentes PNG

flashray

Erfahrenes Mitglied
Hallo Freunde,

hier ein Beispiel wie man ein transparentes Bild erstellen und gleich wieder in der GUI verwenden kann. Auch wird das Bild im PNG Format unter Erhaltung der Transparenz gespeichert. Mit Irfanview könnte man dann daraus ein Icon machen.

Java:
import java.awt.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class TransparentPNG extends JFrame {

	private JButton b = new JButton("Button");

	private JLabel l = new JLabel("Label");

	public TransparentPNG() {
		super("Transparent Shape");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLocationByPlatform(true);

		this.add(new ImagePanel(), BorderLayout.CENTER);
		this.add(b, BorderLayout.NORTH);
		this.add(l, BorderLayout.SOUTH);

		this.pack();
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new TransparentPNG();
	}

	class ImagePanel extends JPanel {

		private BufferedImage bImageSrc = new BufferedImage(48, 48,
				BufferedImage.TYPE_INT_ARGB);

		private BufferedImage bImageDest = new BufferedImage(48, 48,
				BufferedImage.TYPE_INT_ARGB);

		public ImagePanel() {
			this.setPreferredSize(new Dimension(200, 200));

			Graphics g = bImageSrc.getGraphics();
			g.setColor(Color.WHITE);
			g.fillRect(0, 0, 48, 48);
			g.setColor(Color.BLUE);
			g.fillOval(2, 2, 16, 16);
			g.setColor(Color.YELLOW);
			g.fillRoundRect(2, 30, 16, 16, 5, 5);
			g.setColor(Color.RED);
			g.fill3DRect(30, 2, 16, 16, true);
			g.setColor(Color.CYAN);
			g.fill3DRect(30, 30, 16, 16, false);

			ImageFilter colorfilter = new TransparentFilter(Color.WHITE);
			ImageProducer imageprod = new FilteredImageSource(bImageSrc
					.getSource(), colorfilter);
			Image img = this.createImage(imageprod);

			bImageDest.getGraphics().drawImage(img, 0, 0, this);

			TransparentPNG.this.setIconImage(bImageDest);
			b.setIcon(new ImageIcon(bImageDest));
			l.setIcon(new ImageIcon(bImageDest));

			writeImagetoFile();
		}

		public void writeImagetoFile() {
			try {
				ImageIO.write(bImageDest, "PNG", new File(
						"transparentShape.png"));
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}

		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.drawImage(bImageDest, 50, 50, 48, 48, this);
		}
	}

	class TransparentFilter extends RGBImageFilter {
		private final int transparentRGB;

		public TransparentFilter(Color color) {
			this.transparentRGB = color.getRGB();
		}

		@Override
		public int filterRGB(int x, int y, int rgb) {
			if (rgb != transparentRGB)
				return rgb | 0xff000000;
			return rgb & 0xffffff;
		}
	}
}


Vg Erdal
 
Zurück