You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Skia4Delphi绘制虚线?

在Skia4Delphi中绘制虚线的方法

要在Skia4Delphi中绘制虚线,核心是通过**路径效果(PathEffect)**控制描边的间隔样式,具体步骤如下:

关键实现逻辑

Skia中通过TSkPathEffect.CreateDash方法创建虚线样式,将其赋值给TSkPaint的PathEffect属性后,再调用DrawLine即可绘制出指定样式的虚线。

代码示例(以VCL的SkiaPaintBox为例)

procedure TForm1.SkiaPaintBox1Paint(Sender: TObject; const ACanvas: ISkCanvas;
  const ADest: TRectF);
var
  LPaint: ISkPaint;
  LDashArray: TArray<Single>;
begin
  // 初始化Paint对象,设置基础描边属性
  LPaint := TSkPaint.Create;
  LPaint.Color := TAlphaColors.Red;
  LPaint.StrokeWidth := 3;
  LPaint.Style := TSkPaintStyle.Stroke; // 必须设置为Stroke模式才会应用路径效果

  // 定义虚线的间隔规则:[实线长度, 空白长度, 实线长度, 空白长度...]
  // 示例1:20px实线 + 10px空白,循环重复
  LDashArray := [20, 10];
  LPaint.PathEffect := TSkPathEffect.CreateDash(LDashArray, 0); // 第二个参数是偏移量,控制虚线起始位置
  ACanvas.DrawLine(50, 50, 300, 50, LPaint);

  // 示例2:自定义复杂虚线样式
  LDashArray := [10, 5, 5, 5]; // 短实线+空白+更短实线+空白
  LPaint.PathEffect := TSkPathEffect.CreateDash(LDashArray, 0);
  LPaint.Color := TAlphaColors.Blue;
  ACanvas.DrawLine(50, 100, 300, 100, LPaint);

  // 示例3:带偏移量的虚线(可用于动态流动效果)
  LDashArray := [15, 8];
  LPaint.PathEffect := TSkPathEffect.CreateDash(LDashArray, 7); // 偏移7px,虚线起始位置后移
  LPaint.Color := TAlphaColors.Green;
  ACanvas.DrawLine(50, 150, 300, 150, LPaint);
end;

重要说明

  • TSkPaint.Style必须设置为TSkPaintStyle.Stroke,填充模式(Fill)不会应用路径效果
  • LDashArray数组长度可以是偶数或奇数:奇数长度时,Skia会自动重复数组来补全成对的间隔规则
  • CreateDash的第二个参数Phase用于控制虚线的起始偏移,设置为非0值可以实现动态虚线动画(比如定时更新偏移量并重绘)
  • 若要恢复绘制实线,只需将LPaint.PathEffect设为nil即可

内容的提问来源于stack exchange,提问作者user401247

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:49:54