如何在已经绘制到SWT画布上绘制半透明的彩色蒙版?

时间:2013-04-15 10:01:41

标签: java drawing swt java-canvas

所以我想在现有的画布上绘制一个彩色(红色)区域,就像在它上面放置一个红色的镜片一样,原来的图像仍然可以在下面看到。

问题在于我正在扩展一个绘制它自己图像的画布,而我正在绘制它的顶部。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

天真的解决方案是向SWT.Paint添加一个Canvas事件监听器,因为我们不知道对侦听器的调用顺序会导致问题(请查看{{在添加到表的末尾之前,它将重用侦听器表中的旧槽...)。因此,原始侦听器可能会在侦听器之前或之后运行。

一个更好的解决方案 - 我没有尝试,但相信可行 - 可以在原始EventTable.hook()之上添加新的Composite,然后将您的监听器添加到此小部件中新Canvas的{​​{1}}侦听器保证在Paint本身的所有侦听器之后运行。记得

  • Composite添加Canvas监听器,以确保Size的大小始终正确
  • Canvas
  • 上使用Composite

答案 1 :(得分:1)

Canvas paint()方法中,

  1. 画图片
  2. gc.setAlpha(100) //决定你的价值
  3. gc.fillRectangle(rect) // rect是画布的客户区域
  4. 我相信你应该得到你想要的东西。

答案 2 :(得分:-1)

将Alpha值设置为画布只会使颜色变暗并且不会使其透明。通过使用shell.setAlpha(x);

,实际透明gui只能使用shell