【问题标题】:Java SWT - Transparent background on canvas?Java SWT - 画布上的透明背景?
【发布时间】:2015-05-25 11:12:56
【问题描述】:

是否可以在绘制的图像上填充一个矩形和一个椭圆形,并使椭圆形成为其后面图像的“窗口”?

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);

这个 sn-p 显然不适合我,但是这甚至可以通过 SWT 实现吗?

【问题讨论】:

    标签: java canvas swt


    【解决方案1】:

    我成功了,

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

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

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

    实际上效果很好。

    【讨论】:

      【解决方案2】:

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

      这是JavaDoc

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

      fillOval() 会:

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

      【讨论】:

      • 是的,我知道这些选项,我应该提到矩形必须覆盖图像,而椭圆形需要透明。
      • @omm118 好吧,那就用fillRectangle()drawOval()
      • @omm118 或者你想让椭圆“删除”矩形的一部分吗?
      • 如果我使用 fillRectangle 而不是 drawOval,椭圆的背景就是矩形,如果我使用 drawOval 而不是 fillRectangle,矩形也会覆盖椭圆。
      • @omm118 不知道该怎么做。您可能需要自己绘制多边形
      猜你喜欢
      • 2011-07-02
      • 2012-12-18
      • 2022-11-15
      • 2015-03-18
      • 2016-04-21
      • 2012-04-02
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      相关资源
      最近更新 更多