如何在UWP C中使用BezierSegment在Canvas上渲染InkStroke#

时间:2017-05-14 14:06:45

标签: c# canvas uwp inkcanvas cubic-bezier

我正在将应用程序从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中呈现的笔划,红色笔划是从上面的代码在“画布”上呈现的笔划。

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

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:2)

我发现了问题!我正在设置drawingAttributes.FitToCurve = false,这导致控制点为零。我假设这个设置只影响渲染,但现在它是有道理的,因为我正在调用GetRenderingSegments。我可以使用GetInkPoints绘制形状,然后绘制折线。