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
相关产品推荐
相关产品推荐

