我希望我的图像,一个缓冲图像,具有透明背景,我首先尝试使用 png,然后是 gif,然后我尝试使用 imageFilters 但我也无法成功,所以现在我决定使用简单的 jpeg,将背景设置为一种颜色,然后摆脱该颜色,我再次假设 imageFilters 适合它,但我不知道如何使用它们,我想摆脱的颜色是 0xff00d8(洋红色)。
任何人都可以提供一种方法或示例吗?
我希望我的图像,一个缓冲图像,具有透明背景,我首先尝试使用 png,然后是 gif,然后我尝试使用 imageFilters 但我也无法成功,所以现在我决定使用简单的 jpeg,将背景设置为一种颜色,然后摆脱该颜色,我再次假设 imageFilters 适合它,但我不知道如何使用它们,我想摆脱的颜色是 0xff00d8(洋红色)。
任何人都可以提供一种方法或示例吗?
jpeg
不支持透明度。确保您的缓冲图像也支持透明度:
BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
A inTYPE_INT_ARGB
代表 alpha,它是不透明度的度量。
您需要将像素值设置为 0x00000000 以使其透明。
//Load the image
BufferedImage in = ImageIO.read(img);
int width = in.getWidth(), height = in.getHeight();
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
g.drawImage(in, 0, 0, null);
g.dispose();
//Change the color
int colorToChange = 0xff00d8;
for (int x=0;x<width;x++)
for (int y=0;y<height;y++)
if(bi.getRGB(x,y)==colorToChange)
bi.setRGB(x,y,0x00FFFFFF&colorToChange);
bi.save(new File("out.png"));
我设法使用 JWindow 修复它,仍然感谢 Jason 的所有帮助
我有一个扩展 JPanel 的 translucentPane :
public TranslucentPane() {
setOpaque(false);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setComposite(AlphaComposite.SrcOver.derive(0.0f));
g2d.setColor(getBackground());
g2d.fillRect(0, 0, getWidth(), getHeight());
}
然后我在我的主 UI 中执行此操作:
robotUI roboUI = new robotUI();
roboUI.setBackground(new Color(0,0,0,0));
我的内容窗格是:
TranslucentPane pane = new TranslucentPane();
我希望这足以让任何人理解