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

但这没用。

关于如何做到这一点吗?

谢谢 !

有帮助吗?

解决方案

g.clearRect(..) 填充所选矩形的背景颜色 Graphics2D 目的。你最好做 g.fillRect(..) 这将为您的代码提供预期的结果,或设置背景颜色 Graphics2D 事先对象(g.setBackground(..)).

另外,您可能必须做 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC)); 在填充之前,它可以正确设置缓冲区(忽略目标缓冲区数据,仅使用源数据 - 在这种情况下为填充操作)。不确定该值的默认值是多少,但是您应该将其设置回该值以确保正确操作。

其他提示

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

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

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

以及您想清除屏幕的位置

g2D.drawImage(image, null, /*your Image observer*/);                    
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top