Java BuffereImage的透明区域显示为黑色

Java BuffereImage的透明区域显示为黑色,java,image,compositing,Java,Image,Compositing,我知道这与合成有关,但我不知道是什么。在前面的代码部分中,BuffereImage中的特定像素列表被设置为透明黑色: for(Pixel p : closed){ Color c = new Color(image.getRGB(p.x, p.y)); Color newC = new Color(0,0,0, 0); image.setRGB(p.x, p.y, newC.getRGB() & 0x

我知道这与合成有关,但我不知道是什么。在前面的代码部分中,BuffereImage中的特定像素列表被设置为透明黑色:

        for(Pixel p : closed){
            Color c = new Color(image.getRGB(p.x, p.y));
            Color newC = new Color(0,0,0, 0);
            image.setRGB(p.x, p.y, newC.getRGB() & 0x00000000);
        }

        if(andCrop){
            image = image.getSubimage(left, top, right-left, bottom-top);
        }


        return image;
然后,我尝试写出图像:

try {

            BufferedImage out = new BufferedImage(image.getWidth(), image.getHeight(), java.awt.Transparency.TRANSLUCENT);
            Graphics2D g2d = out.createGraphics();
            g2d.setComposite(AlphaComposite.Clear);
            g2d.fillRect(0, 0, image.getWidth(), image.getHeight());
            g2d.setComposite(AlphaComposite.Src);
            g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
            g2d.dispose();

            File outputfile = new File(file);
            ImageIO.write(out, "png", outputfile);
        } catch (IOException e) {

        }
现在,在我尝试将图像绘制到“out”之前,我知道“out”是清晰的。我不明白的是我的合成有什么问题。我不再是透明的,而是全黑了

使用的所有缓冲区映像都是INT_ARGB


编辑-此问题已解决。图像源来自ImageIO.read,返回的BuffereImage不支持alpha。快速的读后转换可以让代码的其余部分顺利运行。

我想到的事情。。。(感谢安德鲁):

所以看起来基本上这是一个误会


此外,你想达到什么效果?您清除一个空图像,然后为其绘制完全透明的像素。。。我就是不明白。

小崽子,这已经被否决了,所以我不确定这是否相关,但问题是,原始的BuffereImage被ImageIO读取,而这张图片不支持ARGB。快速的后期读取转换允许其余代码正常工作。

为了更快地获得更好的帮助,请发布一个.BTW-我将用于图像类型,而不是。我以前使用过ARGB-半透明是在一些绝望的涂鸦之后。我认为最初的图像可能需要是透明的。我的问题是我有一个BuffereImage,它有一些但不是全透明的像素。例如,边界是透明的。我需要把它写进一个文件,但是当我这么做的时候,透明像素是什么?不透明的,不是透明的。呃,有一个输入错误,在源代码中有:publicstaticfinalintopaque=1;公共静态最终整数位掩码=2;公共静态最终整数半透明=3;-但是这个想法是,值3(来自半透明,这里的意思只是ARGB_PRE)是以一种虚假的方式分配的,谢谢!很高兴知道,只是一般而言。我把它换回去。
java.awt.Transparency.TRANSLUCENT = 3
TYPE_INT_ARGB = 2
TYPE_INT_ARGB_PRE = 3

public BufferedImage(int width,
                 int height,
                 int imageType)

Constructs a BufferedImage of one of the predefined image types. (TYPE_...)