C# 如何在WPF中将矩形或圆形等形状转换为手写笔点集合?

C# 如何在WPF中将矩形或圆形等形状转换为手写笔点集合?,c#,wpf,canvas,drawing,inkcanvas,C#,Wpf,Canvas,Drawing,Inkcanvas,我的问题有三个部分: 我能画线、圆、矩形和。。在WPF画布上。我想使用InkCanvas功能,如擦除和移动笔划。 是否可以将此形状转换为手写笔集合 指向并将此集合添加到InkCanvas 如果可能的话,我怎么做 有没有更好的方法来解决这种情况 请引导我。首先,答案是肯定的。可以将路径转换为笔划集合,然后将其添加到InkCanvas 对于问题的第二部分,答案应该是这样的: Point mypoint; Point tg; var pointCollection = new List<Poin

我的问题有三个部分:
我能画线、圆、矩形和。。在WPF画布上。我想使用InkCanvas功能,如擦除和移动笔划。

  • 是否可以将此形状转换为手写笔集合 指向并将此集合添加到InkCanvas
  • 如果可能的话,我怎么做
  • 有没有更好的方法来解决这种情况

  • 请引导我。

    首先,答案是肯定的。可以将路径转换为笔划集合,然后将其添加到InkCanvas
    对于问题的第二部分,答案应该是这样的:

    Point mypoint;
    Point tg;
    var pointCollection = new List<Point>();
        for (var i = 0; i < 500; i++)
            {
               SomePath.Data.GetFlattenedGeometryPath()
                             .GetPointAtFractionLength(i / 500f, out mypoint, out tg);
                pointCollection.Add(p);
            }
    
    通过以下方式在将路径转换为点集合的过程中添加手写笔点:

     StPoints.Add(new StylusPoint(p.X, P.Y));
    
    在此步骤后,调用Stroke方法从手写笔集合创建笔划集合:

     StylusPointCollection StPoints = new StylusPointCollection();
    
    Stroke st = null;
    st = new Stroke(StPoints);
    
    更新
    对有更好的方法向inkCanvas添加形状

  • 您可以直接定义此手写笔点形状,并使用MouseDown、MouseMove.添加它们。。例如,绘制矩形时:

  • 或者重写Stroke类的DrawCore方法并定义新的笔划类型。 (MSDN)


  • 首先,答案是肯定的。可以将路径转换为笔划集合,然后将其添加到InkCanvas
    对于问题的第二部分,答案应该是这样的:

    Point mypoint;
    Point tg;
    var pointCollection = new List<Point>();
        for (var i = 0; i < 500; i++)
            {
               SomePath.Data.GetFlattenedGeometryPath()
                             .GetPointAtFractionLength(i / 500f, out mypoint, out tg);
                pointCollection.Add(p);
            }
    
    通过以下方式在将路径转换为点集合的过程中添加手写笔点:

     StPoints.Add(new StylusPoint(p.X, P.Y));
    
    在此步骤后,调用Stroke方法从手写笔集合创建笔划集合:

     StylusPointCollection StPoints = new StylusPointCollection();
    
    Stroke st = null;
    st = new Stroke(StPoints);
    
    更新
    对有更好的方法向inkCanvas添加形状

  • 您可以直接定义此手写笔点形状,并使用MouseDown、MouseMove.添加它们。。例如,绘制矩形时:

  • 或者重写Stroke类的DrawCore方法并定义新的笔划类型。 (MSDN)


  • 谢谢:)我会尝试新的方法。我认为直接在Inkcanvas上绘制而不是转换路径是个好主意。是的。一如既往地节省了一些内存和处理能力,除此之外,手写笔点不支持火盆点。谢谢:)我将尝试新方法。我认为直接在Inkcanvas上绘制而不是转换路径是个好主意。是的。一如既往地节省了一些内存和处理,除此之外,手写笔点不支持火盆点。