Как визуализировать InkStroke на холсте, используя BezierSegment в UWP C#
Я портирую приложение из javascript на UWP C# и борюсь с новым InkCanvas. Если вы знакомы с новым InkCanvas в UWP, я буду очень признателен за вашу помощь. Это код, который я написал для рендеринга 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, а красный - на холсте из приведенного выше кода.
Кто-нибудь имеет представление о том, что я делаю неправильно?
1 ответ
Я нашел проблему! Я устанавливал DrawingAttributes.FitToCurve = false, и это привело к тому, что контрольные точки были равны нулю. Я предполагал, что этот параметр влияет только на рендеринг, но теперь он имеет смысл, потому что я вызывал GetRenderingSegments. Я смог нарисовать форму с помощью GetInkPoints, а затем нарисовать ломаную линию.