我正在尝试在装有.Net 4.5的Windows 8.1计算机上使用WPF InkCanvas控件的文本识别。
注意:**WPF InkCanvas 控制 Windows 8.1,而不是 Windows 窗体,也不是 Windows Apps!
根据帮助,它应该很容易:
MSDN:手写识别
但是,当我到达这一段时,我卡住了。
添加对 WPF 墨迹分析程序集、IAWinFX.dll、IACore.dll 和 IALoader.dll的引用,这些程序集可在 \Program Files\Reference Assemblies\Microsoft\Tablet PC\v1.7 中找到。将代码隐藏文件的内容替换为以下代码。
我的计算机上没有这些文件。我在Windows 7 Pro PC上尝试过,但仍然找不到它们。
从搜索堆栈溢出和其他地方来看,其他人似乎也有类似的问题,并且似乎还有几种不同版本的墨迹书写/手写识别可用。例如,将其放入Windows 8商店应用程序中似乎应该很容易。但我的问题专门针对 MSDN 文档的 .NET 4.5 WPF 程序!
我只是走上了和你完全相同的道路,我有一个解决方案。 您所说的 MSDN 手写识别链接根本不起作用,这是因为它依赖于 InkAnalyzer 类,该类仅在您在 XP 计算机上安装 Tablet PC v1.7 SDK 时才可用(它不会安装在 Windows 8 上(。
话虽如此,安装 Tablet PC v1.7 SDK 确实会安装 Microsoft.Ink.dll,您可以使用它来执行手写识别。 唯一的缺点是,您必须采用 WPF InkCanvas 笔划并将它们保存到 Microsoft.Ink.InkCollector 笔划中。
解决方案如下:
1( 安装 Windows XP Tablet PC SDK v1.7
2( 遵循 MSDN 手写识别指南中概述的所有相同源代码,但按钮单击实现除外。
3( 通过浏览并选择此 dll,添加对 WPF 应用程序的引用:C:\Program Files (x86(\Microsoft Tablet PC Platform SDK\Include\Microsoft.Ink.dll
4( 将"using Microsoft.Ink"语句添加到 MainWindow.xaml.cs 文件的顶部,然后将以下代码添加到 buttonClick 方法中:
private void buttonClick(object sender, RoutedEventArgs e)
{
using (MemoryStream ms = new MemoryStream())
{
theInkCanvas.Strokes.Save(ms);
var myInkCollector = new InkCollector();
var ink = new Ink();
ink.Load(ms.ToArray());
using (RecognizerContext myRecoContext = new RecognizerContext())
{
RecognitionStatus status;
myRecoContext.Strokes = ink.Strokes;
var recoResult = myRecoContext.Recognize(out status);
if (status == RecognitionStatus.NoError)
{
textBox1.Text = recoResult.TopString;
theInkCanvas.Strokes.Clear();
}
else
{
MessageBox.Show("ERROR: " + status.ToString());
}
}
}
}
就是这样!!! 我想补充一个重要的注意事项。 如果您尝试在 Windows 10 或更高版本上进行手写识别,并且您不必编写桌面 WPF 应用程序,我强烈建议使用他们的 DirectInk 技术。 我已经在Windows 10 RC上测试过它,它更容易使用。 不幸的是,它仅适用于他们的通用应用程序(Metro(,而不适用于桌面应用程序(WPF(。
请尝试以下适用于 Windows 8 的示例。https://code.msdn.microsoft.com/windowsapps/InkPen-sample-in-CSharp-189ce853/sourcecode?fileId=60841&pathId=233613099