2

我创建了一个 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);
(...)

但它没有用。

请问如何做到这一点?

谢谢 !

4

2 回答 2

2

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

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

于 2010-12-30T20:23:06.553 回答
-1

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

在绘画类的构造函数中,截取系统的屏幕截图,但要小心

BufferedImage image = new Robot().createScreenCapture(new Rectangle(0, 23, xScreen, yScreen));

以及您要清除屏幕的位置

g2D.drawImage(image, null, /*your Image observer*/);                    
于 2013-05-16T16:41:30.037 回答