簡體   English   中英

如何在UWP C#中使用BezierSegment在畫布上渲染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上渲染的筆觸。

黑色筆觸是最初在InkCanvas中渲染的筆觸,紅色筆觸是根據上面的代碼在Canvas上渲染的筆觸。

有人知道我在做什么錯嗎?

我發現了問題! 我設置了drawingAttributes.FitToCurve = false,這導致控制點為零。 我以為這個設置只會影響渲染,但是現在變得有意義了,因為我正在調用GetRenderingSegments。 我能夠使用GetInkPoints繪制形狀,然后繪制多段線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM