墨迹数据

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

注意

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

 

墨迹、笔划和数据包

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

中风

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

若要使 Strokes 属性与 Ink 对象保持同步,请将其包装在 Strokes 集合上的 StrokesAddedStrokesRemoved 事件的事件处理程序中。 触发任一事件时,处理程序应获取 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 属性定义应用程序从平板电脑设备获取的每个数据包中的信息集。 这些信息通常包括坐标,但它可以包含更详细的信息 (,具体取决于平板电脑数字化器的功能) 如笔压力或笔角度。 通过使用 DesiredPacketDescription 属性 () ,在收集任何墨迹之前,在 InkCollectorInkOverlay 对象上设置数据包说明,可以完全控制要接收的平板电脑设备属性。

扩展属性

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

墨迹呈现

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

提示

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

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

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