【问题标题】:How do I draw a shape with a hole in it?如何绘制带有孔的形状?
【发布时间】:2018-01-15 05:01:51
【问题描述】:

如何使用Delphi和Firemonkey绘制一个中间有透明圆孔的蓝色正方形,如下图?

我想画这样的东西:

但我找不到使圆圈透明的方法:(

【问题讨论】:

  • 3 步:画无填充的正方形,画无填充的圆形,然后在区域之间使用泛色填充。
  • 我对 Firemonkey 画布不太熟悉,但我确信它具有 Flood Fill 功能,例如 VCL。这与在图像编辑器中使用“油漆桶”本质上是一样的。提供该区域内的颜色和点。
  • @Jerry,我想说,裁剪画布区域可能是一个更好的选择。
  • Flood 填充可能很难做到正确,这取决于画布上已有的内容。毕竟,如果洞需要是透明的,那么那里可能已经有一些东西需要显示出来,所以从任何给定点进行泛洪填充肯定会错过目标区域中的某些东西。
  • FMX 中正确的方法是创建一个路径(TPathData)然后填充路径。 FMX 中的大多数绘图函数(如 Canvas.FillRect)实际上会创建一个 Path 并填充它。

标签: delphi firemonkey


【解决方案1】:

应该这样做:

var lPath: TPathData;
begin
  lPath := TPathData.Create;
  lPath.AddRectangle(RectF(0,0,100,100), 0,0, []);
  lPath.AddEllipse(RectF(20,20,80,80));
  Canvas.Fill.Color := $FF8080FF;
  Canvas.FillPath(lPath,1);
  lPath.Free;
end;

【讨论】:

  • 顺便问一下为什么 lPath 而不是 aPath ? lpath 中的 L 是什么意思?
  • “L”仅表示局部变量,而“A”表示参数(过程/函数的参数)
猜你喜欢
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
相关资源
最近更新 更多