我知道这与合成有关,但我无法弄清楚什么。在代码前面的章节中,在一个BufferedImage像素的特定列表被设置为透明黑色:BufferedImage的透明区域正在写出黑色
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”是清楚的。我没有得到的是我的合成有什么问题。我不是透明的,而是变得全黑。
所有使用的bufferedimages都是INT_ARGB。
编辑 - 这已解决。图像源来自ImageIO.read,返回的BufferedImage不支持alpha。快速读后转换可让其他代码顺利运行。
为了更快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 –
顺便说一句 - 我会使用['BufferedImage.TYPE_INT_ARGB'](http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.image.BufferedImage.TYPE_INT_ARGB)图片类型而不是[Transparency.TRANSLUCENT](http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.awt.Transparency.TRANSLUCENT)。 –