我正在制作游戏,我需要设置一些BufferedImage的像素(使用ImageIO.read加载)以最快,最好的方式透明。
我真的找不到这个问题的任何其他主题,如果我做的答案不能真正帮助/适合我需要的东西。
谢谢:)
答案 0 :(得分:2)
将Color(red, green, blue, alpha)用于值0-255。其中alpha是不透明度。
具有Alpha通道(RGBA,BGRA)类型的抛光图像
Color halfTransparant = new Color(0x76, 0x54, 0x32, 128);
对于阵列上的setRGB,这仍然不快,您可以访问栅格数据。 但为什么在时间紧迫的情况下使用动态生成的图像。
答案 1 :(得分:0)
智能方法是从一开始就使用正确的alpha创建图像(使用具有透明度的图像格式,例如PNG和您最喜欢的成像应用程序,例如GIMP)。
否则,您可以使用BufferedImage API直接更改ImageIO返回的BufferedImage中的像素:setRGB(int ARGB)及其在BufferedImage光栅中的批量操作表兄弟。
答案 2 :(得分:0)
应该适用于所有图像类型(只要它们支持alpha)的一种方法非常快,并且不会禁用图像的硬件加速:
BufferedImage image = ...; // From somewhere
Graphics2D g = destination.createGraphics();
try {
g.setComposite(AlphaComposite.Clear);
g.fillRect(x, y, w, h); // Area to make transparent
}
finally {
g.dispose();
}