【问题标题】:Getting pixel positions for all points in a WPF Path获取 WPF 路径中所有点的像素位置
【发布时间】:2014-08-20 15:06:59
【问题描述】:

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

<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>

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

【问题讨论】:

    标签: .net wpf canvas bezier


    【解决方案1】:

    如果您的意思是要找到沿路径的中心点。我认为我们必须对实际上是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);
    }
    

    【讨论】:

    • 我的意思是找到所有点,我确实意识到在基于矢量的绘图中,路径中有(技术上)无限点。必须有一种方法可以通过扫描所有画布点并找到路径所在的点来做到这一点——尽管我认为在更大的画布中这会效率低得多。但是,您的解决方案已经非常好,我重复一遍,非常符合我的要求! :D
    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 2016-11-25
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多