首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用顶部图像背景色透明地渲染2个图像

使用顶部图像背景色透明地渲染2个图像
EN

Stack Overflow用户
提问于 2010-08-05 06:14:43
回答 1查看 920关注 0票数 0

我在用java编程。

我本质上是在做一个像画一样的工具。当擦除一条线时,背景图像应该保持不变。

所以我想要做的是用一个单独的图像作为背景图像,另一个图像来跟踪鼠标的移动并绘制线条。然后,我将这两张图像组合起来,以显示最终的图像。

我无法解决的问题是擦除功能。我尝试使用setXORMode,如果我有一个单色的背景图像,效果会很好。但是如果图像有渐变颜色,那么我在它上面绘制的线条也会改变颜色。

下面是我正在编写的代码片段:

代码语言:javascript
复制
private void backgroundImageOverNote()  
{  
    Graphics2D g = image.createGraphics();  
    g.drawImage(backgroundImage.getImage(), 0, 0, 400, 200, null);  
    g.drawImage(sketchImage, 0, 0, 400, 200, null);  
    g.dispose();  
}

public void sketch(SketchData sketchEvent)
{
  if(isValidXYPosition(sketchEvent.getX(), sketchEvent.getY()))
  {
    Graphics2D g = sketchImage.createGraphics();
    g.drawLine(oldX, oldY, sketchEvent.getX(), sketchEvent.getY());
    g.dispose();
  }
  oldX = sketchEvent.getX();
  oldY = sketchEvent.getY();
}


private BufferedImage sketchImage = new BufferedImage(400, 200, BufferedImage.TYPE_INT_ARGB);
private ImageIcon backgroundImage; 

EN

回答 1

Stack Overflow用户

发布于 2010-08-05 10:58:29

alt text http://grab.by/grabs/81ccdd4ad6b0d78c130bb2a44d665982.png

您根本不需要使用XOR。特别是如果你把这两个层分开,那就容易多了。

代码语言:javascript
复制
// Opaque
private Composite paintMode = AlphaComposite.getInstance(AlphaComposite.SRC, 1.0f);
// transparent; erases the foreground image allowing the background image through    
private Composite eraseMode = AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f);

然后,到了画图的时候:

代码语言:javascript
复制
if (drawing) {
       graphics.setComposite(paintMode);
   }
   else {
      graphics.setComposite(eraseMode);
   }

然后像平常一样作画。如果你愿意,我有一个完整的源代码示例可以分享。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3410278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档