2015-05-25 111 views
2

是否可以在绘制的图像上填充一个矩形和一个椭圆形,并将椭圆形作为背后图像的“窗口”?Java SWT - 画布上的透明背景?

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实现吗?

回答

1

我设法做到这一点,

我所做的是创建具有SWT.NO_TRIM财产新的外壳(它的父是画布/服装小部件),并在其上使用setRegion()

诀窍是该区域本身,它有一个subtract()方法, 所以我找到了一个方法来产生一个多边形,我从该区域中减去它。

比我设置它和voilà。 我不得不添加调整大小和移动侦听器,以使它看起来“自然”(即,画布的一部分而不是新的外壳)。

它实际上工作得很好。

0

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

这里的JavaDoc

绘制椭圆形的轮廓,使用前景颜色,指定矩形区域内。

鉴于fillOval()作用:

填充椭圆形的内部,指定矩形区域内,与所述接收器的背景颜色。

+0

是的我知道这些选项,我应该提到矩形必须覆盖图像,而椭圆需要透明。 – omm118

+0

@ omm118那么,使用'fillRectangle()'和'drawOval()' – Baz

+0

@ omm118或者你想让椭圆“删除”矩形的一部分? – Baz