Java 使用图形2D填充透明度

Java 使用图形2D填充透明度,java,graphics,transparency,argb,Java,Graphics,Transparency,Argb,我创建了一个ARGB buffereImage。现在我想用一个透明的背景重新初始化它。我尝试了以下代码: (...) if( this.offscreen==null || this.offscreen.getWidth()!= dim.width || this.offscreen.getHeight()!= dim.height ) { this.offscreen=new BufferedImage( dim.width, d

我创建了一个ARGB buffereImage。现在我想用一个透明的背景重新初始化它。我尝试了以下代码:

(...) 
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);
(...)
但它不起作用

你知道怎么做吗

谢谢

g.clearRect(..)
Graphics2D
对象的背景色填充选定的矩形。你最好先做
g.fillRect(..)
,这会给你的代码带来预期的结果,或者预先设置
Graphics2D
对象的背景色(
g.setBackground(..)


另外,您可能需要执行
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC))以便正确设置缓冲区(忽略目标缓冲区数据,仅使用源数据——在本例中为填充操作)。不确定该值的默认值是多少,但您应该在之后将其设置回该值,以确保正确操作。

我以前遇到过这个问题,我用一个非常小的技巧解决了它。 交易如下:

在paint类的构造函数中,对系统进行屏幕截图,但要小心

BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 23, xScreen, yScreen));
以及要清除屏幕的位置

g2D.drawImage(image, null, /*your Image observer*/);                    

怎么没用?抛出异常?创造了一个蓝色的形象?创建了空图像?我的屏幕是白色背景上的黑色。