获取WPF路径中所有点的像素位置

时间:2014-08-20 15:07:00

标签: .net wpf canvas bezier

假设您在画布上绘制了Bezier样条曲线,如下所示:

<Canvas x:Name="SomeCanvas" Width="50" Height="50" Background="Black">
    <Path x:Name="SomePath" Data="M0,0C10,10 10,50 50,10" Stroke="Yellow" StrokeThickness="1"/>
</Canvas>

如何确定画布中哪些像素与路径中心相交(意味着忽略笔画粗细)?

1 个答案:

答案 0 :(得分:4)

如果您的意思是想要找到中心点 沿 路径。我认为我们必须对Path的数据做一些实际上是Geometry的事情。 Geometry有一个名为GetFlattenedGeometryPath的方法,返回PathGeometry,其方法名为GetPointAtFractionLength。所以你可以尝试这样的事情:

 Point centerPoint;
 Point tg;
 SomePath.Data.GetFlattenedGeometryPath()
              .GetPointAtFractionLength(0.5, out centerPoint, out tg);

如果你的意思是想要找到所有要点,我认为这个问题有点抽象。从技术上讲,有无数的点。因此,您可以使用以下代码找到沿路径均匀分散的1000个点:

Point p;
Point tg;
var points = new List<Point>();
for(var i = 0; i < 1000; i++){
  SomePath.Data.GetFlattenedGeometryPath()
               .GetPointAtFractionLength(i / 1000f, out p, out tg);
  points.Add(p);
}