Java SWT - canvas 上的透明背景?

Java SWT - Transparent background on canvas?

是否可以在绘制的图像上填充一个矩形和一个椭圆形,并使椭圆形成为它后面图像的"window"?

e.gc.drawImage(//...);
e.gc.setBackground(//black);
e.gc.fillRectangle(//over the image);
e.gc.setBackground(//SWT.TRANSPARENT?);
e.gc.fillOval(somewhere on the canvas);

这个片段显然对我不起作用,但是这甚至可以用 SWT 实现吗?

不使用 fillOval()fillRectangle(),而是使用 drawOval()drawRectangle() 绘制轮廓而不是填充区域。

这是 JavaDoc:

Draws the outline of an oval, using the foreground color, within the specified rectangular area.

fillOval() 是:

Fills the interior of an oval, within the specified rectangular area, with the receiver's background color.

我做到了,

我所做的是使用 SWT.NO_TRIM 属性 创建一个新的 shell(它的父级是 canvas/costume 小部件)并在其上使用 setRegion() .

诀窍在于区域本身,它有一个 subtract() 方法, 所以我找到了一种生成多边形的方法,并从该区域中减去它。

比我设置好,瞧。 我必须添加调整大小和移动侦听器,以便它看起来 "natural"(即 canvas 的一部分,而不是新的 shell)。

实际上效果很好。