【问题标题】:Programmatically create InkCanvas Stroke from Path Object以编程方式从路径对象创建 InkCanvas Stroke
【发布时间】:2025-12-28 06:35:12
【问题描述】:

我正在尝试将一些扫描的手写材料转换为 InkCanvas,以便使用 InkAnalyser 进行手写识别。我已经在 XAML 中提供了我的手写材料。

我将此路径(字母 t 的边界形状)物理保存在 .XAML 文件中:

<Path xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  Fill="#ff231f20" Data="F1 M 
7.931,2.750 L 7.931,12.267 L 0.000,12.267 L 0.000,19.351 L 7.931,19.351 L 7.931,47.268 C 
7.931,53.295 8.988,57.842 11.526,60.697 C 13.747,63.129 17.236,64.609 21.572,64.609 C 
25.167,64.609 28.022,63.975 29.820,63.340 L 29.396,56.256 C 28.022,56.679 26.542,56.890 
24.004,56.890 C 18.822,56.890 17.025,53.295 17.025,46.950 L 17.025,19.351 L 30.349,19.351 
L 30.349,12.267 L 17.025,12.267 L 17.025,0.000 L 7.931,2.750 Z"/>

我读取 Path 的 XAML 并将其从 MemoryStream 对象 ms 加载到 Path 对象中,如下所示:

Path myPath = (System.Windows.Shapes.Path)XamlReader.Load(ms);

我有一个名为 V 的 InkCanvas。我想以编程方式从 myPath 对象创建笔画数据并将其添加到 InkCanvas。

注意:我不想将 myPath 作为 UI 元素添加到 InkCanvas V 的 Children 中。

我试过这个: http://code.msdn.microsoft.com/windowsdesktop/A-Coordinate-supported-03e4f1b7 是一篇 MSDN 文章,描述了如何将坐标轴绘制到 InkCanvas 中。他正在解释将轴部分绘制到 DrawingContext 对象中。

但他没有解释如何通过这个 DrawingContext 对象将这些绘图实际加载到真实的 InkCanvas 对象上。我需要帮助。

【问题讨论】:

  • 绘图上下文是关于控件的渲染,与InkCanvas的功能和笔画无关。
  • 我在我的问题中涵盖了那部分。我知道。

标签: wpf path inkcanvas stroke


【解决方案1】:

从路径中获取所有点,根据它们的坐标创建StylusPoints。从StylusPoints 中创建一个StylusPointCollection 并使用the respective Stroke constructor 进行描边,然后可以将这个Stroke 添加到画布的Strokes 中。

【讨论】:

  • 我的路径包含贝塞尔元素。唯一的方法是枚举边界内包含的所有点的集合并将它们添加到您说的 StylusPointCollection 中?
  • @Pandey:笔画仅由具有压力值的点组成,如果您有贝塞尔元素,则可以近似那些具有中间点的元素。