如何摆脱图像中的颜色

时间:2013-05-04 13:46:22

标签: java image swing image-processing transparency

我希望我的图像,一个缓冲的图像,有一个透明的背景,我首先尝试使用png,然后是gif,然后我尝试使用imageFilters但我也无法击中它,所以现在我决定使用简单的jpeg,将背景设置为一种颜色,然后摆脱那种颜色,再次,我认为imageFilters适合那种,但我不知道如何使用它们,我想要摆脱的颜色是0xff00d8(品红色)。

任何人都可以帮忙做一个这样做的方法或一个例子吗?

2 个答案:

答案 0 :(得分:2)

jpeg不支持透明度。确保您的缓冲图像也支持透明度:

BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

TYPE_INT_ARGB中的A代表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"));

答案 1 :(得分:1)

我设法使用JWindow修复它,仍然,谢谢Jason的所有帮助

我有一个translucentPane扩展JPanel:

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();

我希望这足以让任何人理解