#489 – 使用InkCanvas 进行手势识别(Using the InkCanvas to Recognize Gestures)

本文介绍如何使用WPF中的InkCanvas控件识别各种手势,包括设置EditingMode属性为GestureOnly来启用手势识别功能,以及如何通过Gesture事件获取手势识别结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你可以设置InkCanvas 的EditingMode 属性进行手势识别。如果设置EditingMode 属性为GestureOnly, 用户将不能在控件上绘图,但是如果使用鼠标或者其他输入设备在控件上绘制手势,InkCanvas 将尝试对手势进行识别。

在这个模式下,只要你不放开鼠标或者输入设备,任何你绘制的图像将会显示,一旦放开就会消失。

正在绘制时:

绘制完成时:

一旦你完成绘制手势,InkCanvas 将会尝试识别你绘制的内容。它将会触发Gesture 事件,在Gesture 事件中你可以询问它识别出了什么样的手势。

所有InkCanvas 可以识别的手势都列在了System.Windows.Ink.ApplicationGesture 枚举中。包含有类似圆圈、方形、点击、勾选和点击等。

下面是一个例子,注册Gesture 事件,然后在事件响应函数中调用GetGestureRecognitionResults 方法获得一个包含候选手势的列表。我们在例子的后面将获得的识别手势在一个调试窗口上显示出来。

private void ink_Gesture(object sender, InkCanvasGestureEventArgs e)
{
    ReadOnlyCollection<GestureRecognitionResult> gestures = e.GetGestureRecognitionResults();
 
    foreach (GestureRecognitionResult gest in gestures)
    {
        Trace.WriteLine(string.Format("Gesture: {0}, Confidence: {1}", gest.ApplicationGesture, gest.RecognitionConfidence));
    }
}

下面是一些识别出来的示例的手势,每个手势都有一个Confidence 属性,改属性值由.Net系统提供,它建议手势识别结果的可信度。


原文地址:https://wpf.2000things.com/2012/02/07/489-using-the-inkcanvas-to-recognize-gestures-part-i/

********************************************译者注***************************************************

下面将ApplicationGesture 枚举的值列举出来:


 AllGestures  识别所有特定于应用程序的笔势。
 NoGesture  不识别任何特定于应用程序的笔势。
 Scratchout  只可使用一个笔画绘制此笔势,并且该笔画至少包含三次来回移动。
 Triangle  只可使用一个笔画绘制三角形,而不可抬笔。
 Square  可以使用一个或两个笔画绘制正方形。如果只有一个笔画,请绘制整个正方形而不抬笔。如有两个笔画,请首先绘制正方形的三条边,然后使用另一个笔画绘制剩下的一条边。绘制正方形的笔画不可超过两个。
 Star  星形必须恰有五个点,并且必须一个笔画绘制完毕而不抬笔。
 Check  上行笔画的长度必须为较短的下行笔画的两倍。
 Curlicue  请在需要执行操作的位置开始绘制花体。
 DoubleCurlicue  请在需要执行操作的位置开始绘制双花体。
 Circle  只可使用一个笔画绘制圆圈,而不可抬笔。
 DoubleCircle  这两个圆圈必须相互重叠,并且只可使用一个笔画绘制这两个圆圈,而不可抬笔。
 SemiCircleLeft  必须从左至右绘制半圆。半圆的两端应当尽量保持水平。
 SemiCircleRight  必须从右至左绘制半圆。半圆的两端应当尽量保持水平。
 ChevronUp V  形的两边必须绘制得尽量相等。角度必须为锐角,并在一点结束。
 ChevronDown V  形的两边必须绘制得尽量相等。角度必须为锐角,并在一点结束。
 ChevronLeft V  形的两边必须绘制得尽量相等。角度必须为锐角,并在一点结束。
 ChevronRight V  形的两边必须绘制得尽量相等。角度必须为锐角,并在一点结束。
 ArrowUp  可以使用一个笔画绘制箭头,也可以使用两个笔画绘制箭头(一个笔画为线条,另一个笔画为箭头的头部)。绘制箭头的笔画不可超过两个。
 ArrowDown  可以使用一个笔画绘制箭头,也可以使用两个笔画绘制箭头(一个笔画为线条,另一个笔画为箭头的头部)。绘制箭头的笔画不可超过两个。
 ArrowLeft  可以使用一个笔画绘制箭头,也可以使用两个笔画绘制箭头(一个笔画为线条,另一个笔画为箭头的头部)。绘制箭头的笔画不可超过两个。
 ArrowRight  可以使用一个笔画绘制箭头,也可以使用两个笔画绘制箭头(一个笔画为线条,另一个笔画为箭头的头部)。绘制箭头的笔画不可超过两个。
 Up  绘制此笔势必须快速向上一次划过。
 Down  绘制此笔势必须快速向下一次划过。
 Left  绘制此笔势必须快速向左一次划过。
 Right 绘制此笔势必须快速向右一次划过。
 UpDown  只可使用一个笔画绘制此笔势,并且首先书写向上笔画。两个笔画必须尽量相互靠近。
 DownUp  只可使用一个笔画绘制此笔势,并且首先书写向下笔画。两个笔画必须尽量相互靠近。
 LeftRight  只可使用一个笔画绘制此笔势,并且首先书写向左笔画。两个笔画必须尽量相互靠近。
 RightLeft  只可使用一个笔画绘制此笔势,并且首先书写向右笔画。两个笔画必须尽量相互靠近。
 UpLeftLong  只可使用一个笔画绘制此笔势,并且首先书写向上笔画。向左笔画的长度必须是向上笔画的两倍,并且这两个笔画必须构成直角。
 UpRightLong  只可使用一个笔画绘制此笔势,并且首先书写向上笔画。向右笔画的长度必须是向上笔画的两倍,并且这两个笔画必须构成直角。
 DownLeftLong  只可使用一个笔画绘制此笔势,并且首先书写向下笔画。向左笔画的长度大约为向上笔画的两倍,并且这两个笔画必须构成直角。
 DownRightLong  表示按下空格键。只可使用一个笔画绘制此笔势,并且首先书写向下笔画。向右笔画的长度必须是向上笔画的两倍,并且这两个笔画必须构成直角。
 UpLeft  只可使用一个笔画绘制此笔势,并且首先书写向上笔画。两边的长度必须尽量相等,并且两边构成直角。
 UpRight  只可使用一个笔画绘制此笔势,并且首先书写向上笔画。两边的长度必须尽量相等,并且两边构成直角。
 DownLeft  只可使用一个笔画绘制此笔势,并且首先书写向下笔画。两边的长度必须尽量相等,并且两边构成直角。
 DownRight  只可使用一个笔画绘制此笔势,并且首先书写向下笔画。两边的长度必须尽量相等,并且两边构成直角。
 LeftUp  只可使用一个笔画绘制此笔势,并且首先书写向左笔画。两边的长度必须尽量相等,并且两边构成直角。
 LeftDown  只可使用一个笔画绘制此笔势,并且首先书写向左笔画。两边的长度尽量相等,并且两边构成直角。
 RightUp  只可使用一个笔画绘制此笔势,并且首先书写向右笔画。两边的长度必须尽量相等,并且两边构成直角。
 RightDown  只可使用一个笔画绘制此笔势,并且首先书写向右笔画。两边的长度必须尽量相等,并且两边构成直角。
 Exclamation  必须首先绘制线条,然后快速绘制圆点,并且圆点尽量靠近线条。
 Tap  表示一次鼠标单击。为了尽量减少挪移,请快速点击。
 DoubleTap  表示一次鼠标双击。为了取得最佳效果,请快速点击,并尽量点击同一位置。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值