如何创建蒙版并在其上绘制
How do create a mask and draw on it
我有 2 个矩形,如下图所示:
现在我只想绘制黄色矩形 (B) 中红色矩形内的部分。所以我将 clipchildreen=True 设置为矩形 A,我得到了这个:
但是效果不好,红色矩形外的黄色矩形的一部分还在画。我想得到这个:
我该怎么做?最终我可以直接在 canvas 上绘制,但即使这样我也没有找到一种简单的方法来实现我想做的事情
这是一个可能适合您的解决方案,尽管我已经对您的要求做了一些假设,而且这不是一个特别简单的方法。它涉及使用具有 InnerRound
个角的矩形来隐藏黄色正方形的一部分。
对于下面的步骤,我假设表格是白色的,黄色方块是 50 x 50,红色方块是 150 x 150,圆角的半径是 20,整体是位于表格上的 100,100。
我将此描述为好像您手动将所有控件直接定位到表单上一样,但如果我这样做,我会添加几个 TLayout
并使用 Align
s 无处不在(第四步的情况下边距为负)。您可以在面板或其他控件上而不是直接在窗体上执行此操作。
请注意 z-order 很重要,这就是为什么应按此顺序执行下面的步骤 2 到 5 的原因。
- 将表格的
Fill.Kind
设置为Solid
。
- 在 100,100 处放置一个
TRectangle
。将 XRadius
和 YRadius
都设置为 20,将 Width
和 Height
都设置为 150,将 Fill.Color
设置为 Red
,将 Stroke.Kind
设置为 None
.
- 在 100,100 处放置一个
TRectangle
。将 Fill.Color
设置为 Yellow
。
- 在 80,80 处放置一个
TRectangle
。将 XRadius
和 YRadius
都设置为 20,将 Height
和 Width
都设置为 20,将 Fill.Color
设置为 White
(Fill.color
表格),Stroke.Kind
到 None
,以及 CornerType
到 InnerRound
。
- 在 100,100 处放置一个
TRectangle
。将 XRadius
和 YRadius
都设置为 20,将 Height
和 Width
都设置为 150,将 Fill.Kind
设置为 None
。
这是结果:
我有 2 个矩形,如下图所示:
现在我只想绘制黄色矩形 (B) 中红色矩形内的部分。所以我将 clipchildreen=True 设置为矩形 A,我得到了这个:
但是效果不好,红色矩形外的黄色矩形的一部分还在画。我想得到这个:
我该怎么做?最终我可以直接在 canvas 上绘制,但即使这样我也没有找到一种简单的方法来实现我想做的事情
这是一个可能适合您的解决方案,尽管我已经对您的要求做了一些假设,而且这不是一个特别简单的方法。它涉及使用具有 InnerRound
个角的矩形来隐藏黄色正方形的一部分。
对于下面的步骤,我假设表格是白色的,黄色方块是 50 x 50,红色方块是 150 x 150,圆角的半径是 20,整体是位于表格上的 100,100。
我将此描述为好像您手动将所有控件直接定位到表单上一样,但如果我这样做,我会添加几个 TLayout
并使用 Align
s 无处不在(第四步的情况下边距为负)。您可以在面板或其他控件上而不是直接在窗体上执行此操作。
请注意 z-order 很重要,这就是为什么应按此顺序执行下面的步骤 2 到 5 的原因。
- 将表格的
Fill.Kind
设置为Solid
。 - 在 100,100 处放置一个
TRectangle
。将XRadius
和YRadius
都设置为 20,将Width
和Height
都设置为 150,将Fill.Color
设置为Red
,将Stroke.Kind
设置为None
. - 在 100,100 处放置一个
TRectangle
。将Fill.Color
设置为Yellow
。 - 在 80,80 处放置一个
TRectangle
。将XRadius
和YRadius
都设置为 20,将Height
和Width
都设置为 20,将Fill.Color
设置为White
(Fill.color
表格),Stroke.Kind
到None
,以及CornerType
到InnerRound
。 - 在 100,100 处放置一个
TRectangle
。将XRadius
和YRadius
都设置为 20,将Height
和Width
都设置为 150,将Fill.Kind
设置为None
。
这是结果: