如何在 UWP C# 中使用 BezierSegment 在 Canvas 上渲染 InkStroke
How to render InkStroke on Canvas using BezierSegment in UWP C#
我正在将一个应用程序从 javascript 移植到 UWP c#,我正在为新的 InkCanvas 而苦苦挣扎。如果您熟悉 UWP 中的新 InkCanvas,我将非常感谢您的帮助。
这是我编写的代码,它将 InkStroke 渲染到 Canvas.
public static void Bezier(Canvas canvas, InkStroke stroke)
{
var segments = stroke.GetRenderingSegments();
PathFigure pthFigure = new PathFigure() { StartPoint = new Point(segments[0].Position.X, segments[0].Position.Y)};
for (int i = 1; i < segments.Count; i++)
{
var segment = segments[i];
var bezier = new BezierSegment();
bezier.Point1 = new Point(segment.BezierControlPoint1.X, segment.BezierControlPoint1.Y);
bezier.Point2 = new Point(segment.BezierControlPoint2.X, segment.BezierControlPoint2.Y);
bezier.Point3 = new Point(segment.Position.X, segment.Position.Y);
pthFigure.Segments.Add(bezier);
}
PathGeometry pthGeometry = new PathGeometry();
pthGeometry.Figures.Add(pthFigure);
Path path = new Path();
//path.Stroke = new SolidColorBrush(stroke.DrawingAttributes.Color);
//path.StrokeThickness = stroke.DrawingAttributes.Size.Height;
path.Stroke = new SolidColorBrush(Colors.Red);
path.StrokeThickness = 1;
path.Data = pthGeometry;
canvas.Children.Add(path);
}
不幸的是,控制点似乎乱七八糟,我不明白为什么。
您可以在下面看到我得到的 运行 这段代码的图片。
黑色笔划是最初在 InkCanvas 中呈现的笔划,红色笔划是上面代码中 Canvas 中呈现的笔划。
The black stroke is the one originally rendered in the InkCanvas, and the red stroke is the one rendered on the Canvas from the code above
有人知道我做错了什么吗?
我找到问题了!我正在设置 drawingAttributes.FitToCurve = false,这导致控制点为零。我假设此设置只影响渲染,但现在它有意义了,因为我正在调用 GetRenderingSegments。我能够使用 GetInkPoints 绘制形状,然后绘制折线。
我正在将一个应用程序从 javascript 移植到 UWP c#,我正在为新的 InkCanvas 而苦苦挣扎。如果您熟悉 UWP 中的新 InkCanvas,我将非常感谢您的帮助。 这是我编写的代码,它将 InkStroke 渲染到 Canvas.
public static void Bezier(Canvas canvas, InkStroke stroke)
{
var segments = stroke.GetRenderingSegments();
PathFigure pthFigure = new PathFigure() { StartPoint = new Point(segments[0].Position.X, segments[0].Position.Y)};
for (int i = 1; i < segments.Count; i++)
{
var segment = segments[i];
var bezier = new BezierSegment();
bezier.Point1 = new Point(segment.BezierControlPoint1.X, segment.BezierControlPoint1.Y);
bezier.Point2 = new Point(segment.BezierControlPoint2.X, segment.BezierControlPoint2.Y);
bezier.Point3 = new Point(segment.Position.X, segment.Position.Y);
pthFigure.Segments.Add(bezier);
}
PathGeometry pthGeometry = new PathGeometry();
pthGeometry.Figures.Add(pthFigure);
Path path = new Path();
//path.Stroke = new SolidColorBrush(stroke.DrawingAttributes.Color);
//path.StrokeThickness = stroke.DrawingAttributes.Size.Height;
path.Stroke = new SolidColorBrush(Colors.Red);
path.StrokeThickness = 1;
path.Data = pthGeometry;
canvas.Children.Add(path);
}
不幸的是,控制点似乎乱七八糟,我不明白为什么。
您可以在下面看到我得到的 运行 这段代码的图片。 黑色笔划是最初在 InkCanvas 中呈现的笔划,红色笔划是上面代码中 Canvas 中呈现的笔划。
The black stroke is the one originally rendered in the InkCanvas, and the red stroke is the one rendered on the Canvas from the code above
有人知道我做错了什么吗?
我找到问题了!我正在设置 drawingAttributes.FitToCurve = false,这导致控制点为零。我假设此设置只影响渲染,但现在它有意义了,因为我正在调用 GetRenderingSegments。我能够使用 GetInkPoints 绘制形状,然后绘制折线。