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

SkiaSharp能否绘制带有路径点标记的路径?

在SkiaSharp中为路径点添加标记的实现方法

SkiaSharp没有直接为DrawPoints绘制的路径点添加标记的内置参数,但可以通过遍历路径点集合并单独绘制标记图形的方式实现,具体步骤如下:

1. 准备绘制样式

分别创建绘制路径和点标记的SKPaint对象,区分样式和颜色:

// 路径画笔
var pathPaint = new SKPaint
{
    Color = SKColors.Blue,
    StrokeWidth = 2,
    Style = SKPaintStyle.Stroke
};

// 点标记画笔
var markerPaint = new SKPaint
{
    Color = SKColors.Red,
    Style = SKPaintStyle.Fill
};

2. 绘制基础路径

使用你原本的DrawPoints方法绘制多边形路径:

canvas.DrawPoints(SKPointMode.Polygon, points, pathPaint);

3. 遍历绘制点标记

针对每个路径点,绘制对应的标记(以下提供几种常用标记示例):

圆形标记

float markerRadius = 8;
foreach (var point in points)
{
    canvas.DrawCircle(point.X, point.Y, markerRadius, markerPaint);
}

方形标记

float markerSize = 8;
foreach (var point in points)
{
    var markerRect = new SKRect(
        point.X - markerSize / 2,
        point.Y - markerSize / 2,
        point.X + markerSize / 2,
        point.Y + markerSize / 2
    );
    canvas.DrawRect(markerRect, markerPaint);
}

自定义十字标记

如果需要复杂标记,可通过SKPath构建后绘制:

float markerSize = 8;
var crossMarker = new SKPath();
crossMarker.MoveTo(-markerSize, 0);
crossMarker.LineTo(markerSize, 0);
crossMarker.MoveTo(0, -markerSize);
crossMarker.LineTo(0, markerSize);

foreach (var point in points)
{
    canvas.Save();
    canvas.Translate(point.X, point.Y);
    canvas.DrawPath(crossMarker, markerPaint);
    canvas.Restore();
}

注意事项

  • 记得在WPF控件生命周期结束时(如SKElement卸载)回收SKPaint、SKPath等资源,避免内存泄漏。
  • 标记的大小、颜色可根据实际视觉需求调整,确保与路径的比例协调。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:42:32