2009-10-29 7 views

답변

0

Reflector를 사용하여 불행히도 EllipseGeometry 클래스에 GetPointList() 메서드가 있다는 것을 알았습니다. 어쩌면 당신은 반사를 통해 그것을 호출 할 수 있지만 그건 아주 나쁜 해킹처럼 들리 네요 ... 다른 방법을 찾으면 내가 볼 수 있습니다 ...

+0

을 내 POC –

5

WPF에서는 실제 "점"이없는 기하학 - 그것은 무한대입니다 부드러운. 이것은 타원을 확대하여 볼 수 있습니다. 1,000,000x 줌으로 이동할 수 있으며 곡률 및 포인트가 표시되지 않습니다.

WPF 도형은 점으로 구성되지 않으므로 여러 가지 방법으로 질문을 해석 할 수 있습니다. 이러한 모든 찾고있을 수 있습니다

  • 타원의 경계 (폴리 라인 근사치) 채우기
  • 의 세트를 포함 타원에 포함 픽셀의
  • 세트를 근사 점의 목록 당신이 즉, 이산 점과 타원 (의 근사치를 찾고 있다면

    : 타원 여기

의 가장자리에 포함 픽셀은 각각의 경우에 솔루션입니다. 타원처럼 보이는 점선 버전)이 코드를 사용하면 영향을받는 픽셀을 찾고 있다면

PolyLineSegment segment = 
    ellipse.DefiningGeometry 
     .GetFlattenedPathGeometry(1.0, ToleranceType.Absolute) 
     .Figures[0].Segments[0] as PolyLineSegment; 

    foreach(Point p in segment.Points) 
    ... 

을, 당신은 RenderTargetBitmap해야합니다 :

RenderTargetBitmap rtb = 
    new RenderTargetBitmap(width, height, 96, 96, PixelFormat.Gray8); 
    rtb.Render(ellipse); 
    byte[] pixels = new byte[width*height]; 
    rtb.CopyPixels(pixels, width, 0); 

모든 0이 아닌 값을 픽셀 []은 부분적으로 타원으로 덮여 있습니다. 타원에 채우기가 있으면 타원에 내부 점이 포함됩니다. , 그것의 충분한

var newEllipse = new Path 
    { 
    Data = ellipse.DefiningGeometry, 
    Stroke = Brushes.Black, 
    }; 
    RenderTargetBitmap rtb = ... 
    [same as before] 
+0

와우에 대한 :

당신은 RenderTargetBitmap에 전달할 가장자리를 따라 픽셀 만 얻을 필요하지만 타원이 가득, 또는 그 반대로, 당신은 새로운 모양을 만들 수있는 경우 세부 사항을위한 감사합니다! – japf