2009-10-29 96 views

回答

0

通過使用Reflector,我發現EllipseGeometry類中有一個GetPointList()方法,不幸的是它是私有的。也許你可以通過反射來調用它,但這聽起來像一個非常糟糕的破解...我會看看如果我找到另一種方式...

+0

它足以讓我的POC – 2009-10-29 16:42:40

5

在WPF中幾何中沒有實際的「點」 - 它是無限的光滑。這可以通過放大橢圓來看出。您可以進行1,000,000倍變焦,並且您仍然可以看到曲率和沒有點。

由於WPF形狀不是由點組成,所以您的問題可以通過多種方式進行互動。你可能會尋找任何這些:

  • 近似橢圓的邊界(折線近似)
  • 一組由橢圓覆蓋的像素的包括填充
  • 一組點的列表由橢圓

這裏的邊緣覆蓋的像素在每種情況下的解決方案:

如果你正在尋找的橢圓離散點(即的近似值。看起來像一個橢圓形虛線版),使用此代碼:如果你正在尋找受影響的像素

​​

,你需要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); 

任何非零值以像素爲單位[]部分被橢圓覆蓋。如果橢圓有填充,這將包括橢圓內部的點。

如果你需要得到僅沿邊緣的像素,但你的橢圓填充,反之亦然,你可以創建一個新的形狀傳遞給RenderTargetBitmap:

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

哇,感謝細節! – japf 2009-10-30 09:53:22