1

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

问题是我正在扩展一个画布来绘制它自己的图像,并且我正在它的顶部进行绘制。

我怎样才能做到这一点?

4

3 回答 3

1

天真的解决SWT.Paint方案是CanvasEventTable.hook()表...)。因此,原始侦听器可能会在您的侦听器之前或之后运行。

一个更好的解决方案 - 我没有尝试过,但相信可以工作 - 应该是Composite在原来的顶部添加一个新的Canvas,然后将你的监听器添加到这个小部件,因为任何Paint新的监听Composite器都保证在所有监听器之后运行Canvas本身。记得

  • 向 中添加一个Size侦听器以Canvas确保 的大小Composite始终正确
  • 使用setBackgroundMode(SWT.INHERIT_FORCE)Canvas
于 2013-04-15T11:24:56.107 回答
1

In your Canvas paint() method,

  1. draw image
  2. gc.setAlpha(100) //decide your value
  3. gc.fillRectangle(rect) //rect is client area of the canvas

I believe you should get what you are looking for.

于 2013-04-15T14:29:27.687 回答
-1

将 alpha 值设置为画布只会使颜色变暗,不会使其透明。使用 shell.setAlpha(x); 只有在 shell 中才能实现真正的透明 gui;

于 2014-02-11T10:39:32.310 回答