我创建了一个ARGB BufferedImage。现在我想用透明的背景重新初始化它。我尝试了以下代码:
(...)
if( this.offscreen==null ||
this.offscreen.getWidth()!= dim.width ||
this.offscreen.getHeight()!= dim.height )
{
this.offscreen=new BufferedImage(
dim.width,
dim.height,
BufferedImage.TYPE_INT_ARGB);
}
Graphics2D g=this.offscreen.createGraphics();
g.setColor(new Color(255,255,255,0));
g.clearRect(0, 0, dim.width, dim.height);
(...)
但它不起作用。
请问如何做到这一点?
谢谢!
答案 0 :(得分:2)
g.clearRect(..)
使用Graphics2D
对象的背景颜色填充所选矩形。您最好使用g.fillRect(..)
来为您的代码提供预期结果,或者事先设置Graphics2D
对象的背景颜色(g.setBackground(..)
)。
此外,您可能必须在填充之前执行g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
,以便正确设置缓冲区(忽略目标缓冲区数据,仅使用源数据 - 在本例中为填充操作)。不确定此值的默认值是什么,但您应该将其重新设置为该值以确保正常运行。
答案 1 :(得分:-1)
之前我遇到过这个问题,我用一个非常狭窄的技巧解决了这个问题。 这是交易:
在paint类的构造函数中,拍摄系统的屏幕截图但要小心
BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 23, xScreen, yScreen));
您要清除屏幕的位置
g2D.drawImage(image, null, /*your Image observer*/);