使用Graphics2D填充透明度
-
14-10-2019 - |
题
我创建了一个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*/);
不隶属于 StackOverflow