墨迹数据

收集墨迹后,应用程序可以管理、作和/或将数据传输到其他媒体。 选择、复制、移动、保存、查看和更改墨迹的作发生在 Ink 对象及其包含的成员上,例如 笔划 集合和 笔划 对象。

注意

使用 Real-Time 触笔,应用程序可以选择以自己的格式(例如保存笔划)来维护数据。

 

墨迹、笔划和数据包

Ink 对象是管理、作和存储从 InkCollector 对象收集的输入的基本数据类型。 Ink 对象包含一个或多个 笔划 对象以及用于管理和作这些笔划的常见方法和属性。 笔划定义为在单个向下笔、笔移动和向上笔顺序中捕获的数据集。 笔划数据包含数据包集合。 数据包是平板电脑设备在每个样本点发送的一组数据。 此数据包含坐标、笔压、笔角等信息,以及硬件可以传输的任何其他信息。 Stroke 对象的 PacketDescription 属性描述 Tablet 生成的数据包。

中风

可以使用 Ink 对象的 Strokes 属性获取 Ink 对象中的笔划快照。 Strokes 属性是读取 笔划 属性时对 Ink 对象中笔划的引用的集合。 如果随后在 Ink 对象中添加或删除笔划,则不会更新以前获取的 笔划 集合。 此外,Strokes 属性是一个值,并且与任何值一样,除非它被分配给变量,否则它将超出范围。

若要使 Strokes 属性与 Ink 对象保持同步,请将其包装在 StrokesAdded 的事件处理程序中,并在 Strokes 集合上 StrokesRemoved 事件。 当触发任一事件时,处理程序应获取 Strokes 属性的新副本。 请注意不要将事件处理程序添加到 Strokes 集合中,该集合在触发事件之前不在作用域内。

请注意,在此示例中,theAddedStrokesIDs 使用 StrokesAdded_Event 处理程序中的笔划属性的新副本进行更新。

public void StrokesAdded_Event(object sender, StrokesEventArgs e)
{
    int [] theAddedStrokesIDs = e.StrokeIds;
    theListBox.Items.Clear();
    foreach (int i in theAddedStrokesIDs)
    {
        theListBox.Items.Add("Added Stroke ID: " + i.ToString());
    }
}

PacketDescription 属性

Ink 对象的 PacketDescription 属性定义应用程序从平板电脑设备获取的每个数据包中的信息集。 这些信息通常包括坐标,但它可以包含更详细的信息(具体取决于平板电脑数字化器的功能),如笔压或笔角。 通过在收集任何墨迹之前在 InkCollectorInkOverlay 对象上设置数据包说明(使用 DesiredPacketDescription 属性),可以完全控制要接收的平板电脑设备属性。

扩展属性

扩展属性提供了一种机制,用于将应用程序定义的数据附加到 Ink 和其他对象。 有关扩展属性的详细信息,请参阅 ExtendedProperties 集合。

墨迹呈现

呈现器 对象负责呈现 Ink。 给定适当的平板电脑上下文,呈现器 对象可以将墨迹空间坐标映射到像素、应用视图转换以及在屏幕上和打印机上显示墨迹。 DrawDrawStroke 方法是呈现墨迹的主要方法。 有关在窗口中显示墨迹的详细信息,请参阅 呈现器 对象。

Cusps

笔划通常在将笔降低到绘图图面时开始,当笔升起时结束。 在笔划中,方向的峰值、角度和根本性变化称为提示。 笔划的终结点也被视为提示。 例如,大写字母“L”有三个提示,一个在中间,一个在每端一个。

输入笔划时,通常使用贝塞尔(或折线)曲线平滑呈现。 贝塞尔曲线可能会将小圈变成小循环。 例如,卷曲字母“i”的峰值可能会平滑,类似于卷曲“e”。 为防止这种情况,Microsoft呈现器具有“预贝塞尔”阶段,以不同的方式处理提示。

Cusps 还可用于将 Stroke 对象细分为可擦除单位。 例如,选择大写“L”的垂直侧可能表示仅擦除该侧。 要擦除的笔划部分将是两个提示之间的部分。