2009-10-29 99 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