在WPF中,几何体中没有实际的"点" - 它是无限平滑的.这可以通过放大椭圆来看出.你可以使用1,000,000倍变焦,你仍然可以看到曲率和没有点.
由于WPF形状不是由点组成的,因此您的问题可以通过多种方式进行交互.您可能正在寻找以下任何一种:
以下是每种情况下的解决方案:
如果您正在寻找椭圆的近似值作为离散点(即看起来像椭圆的虚线版本),请使用以下代码:
PolyLineSegment segment =
ellipse.DefiningGeometry
.GetFlattenedPathGeometry(1.0, ToleranceType.Absolute)
.Figures[0].Segments[0] as PolyLineSegment;
foreach(Point p in segment.Points)
...
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找受影响的像素,则需要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);
Run Code Online (Sandbox Code Playgroud)
像素[]中的任何非零值都部分被椭圆覆盖.如果椭圆具有填充,则这将包括椭圆内部的点.
如果只需要沿边缘获取像素但填充椭圆,反之亦然,则可以创建一个新的Shape以传递给RenderTargetBitmap:
var newEllipse = new Path
{
Data = ellipse.DefiningGeometry,
Stroke = Brushes.Black,
};
RenderTargetBitmap rtb = ...
[same as before]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2633 次 |
最近记录: |