2017-05-14 14 views
1

자바에서 UWP C#으로 응용 프로그램을 이식하고 있는데 새로운 InkCanvas으로 고민하고 있습니다. UWP의 새로운 InkCanvas에 익숙하신 분께 감사드립니다. 이것은 캔버스에 렌더링을 가져 오는 InkStroke 코드입니다.UWP에서 BezierSegment를 사용하여 Canvas에서 InkStroke를 렌더링하는 방법 C#

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

누구나 내가 뭘 잘못의 어떤 생각을 가지고?

+0

내 편에서 코드 조각을 테스트하면 [이 그림] (https://i.stack.imgur.com/EmB3o.png)과 같은 결과가 나타납니다. 이것이 당신의 기대 결과입니까? 위 사진에서 보여준 결과를 재현 할 수 없습니다. 위의 메서드를 호출하는 방법과 XAML 코드도 제공하십시오. 또한 uwp 앱 버전입니다. –

+0

XML 코드는 동적으로 빌드 한 이후에 쉽게 재현 할 수 없지만 문제가 발견되었습니다. 나는 drawingAttributes.FitToCurve = false를 설정하고 이것이 제어점을 0으로 만들었습니다. 이 설정은 렌더링에만 영향을 미쳤지 만 GetRenderingSegments를 호출 했으므로 이제는 의미가 있습니다. GetInkPoints를 사용하여 도형을 그린 다음 폴리 라인을 그릴 수있었습니다. 신속한 답변을 보내 주셔서 감사합니다! – ClaudiaWey

답변

1

문제점을 발견했습니다. 나는 drawingAttributes.FitToCurve = false를 설정하고 이것이 제어점을 0으로 만들었습니다. 이 설정은 렌더링에만 영향을 미쳤지 만 GetRenderingSegments를 호출 했으므로 이제는 의미가 있습니다. GetInkPoints를 사용하여 도형을 그린 다음 폴리 라인을 그릴 수있었습니다.