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)。
实际上效果很好。
是否可以在绘制的图像上填充一个矩形和一个椭圆形,并使椭圆形成为它后面图像的"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)。
实际上效果很好。