【问题标题】:Filling with transparency using Graphics2D使用 Graphics2D 填充透明度
【发布时间】:2010-12-30 20:12:31
【问题描述】:

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

但是没有用。

请问有什么办法吗?

谢谢!

【问题讨论】:

  • 不工作怎么办?抛出异常?创建了一个蓝色图像?创建了一个空图像?
  • 我的屏幕是白色背景上的黑色。

标签: java graphics transparency argb


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    在paint Class的构造函数中截取系统截图,但要小心

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

    还有你想清屏的地方

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

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2019-10-29
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多