3

我正在尝试在带有 .Net 4.5 的 Windows 8.1 计算机上使用带有 WPF InkCanvas 控件的文本识别。

注意:**WPF InkCanvas 控制 Windows 8.1 **,不是 Windows 窗体,也不是 Windows 应用程序!

根据帮助,它应该很容易:

MSDN:手写识别

但是,当我进入本段时,我被卡住了。

添加对 WPF 墨迹分析程序集 IAWinFX.dll、IACore.dll 和 IALoader.dll 的引用,可在 \Program Files\Reference Assemblies\Microsoft\Tablet PC\v1.7 中找到它们。将代码隐藏文件的内容替换为以下代码。

我的电脑上没有这些文件。我在我的 Windows 7 Pro PC 上尝试过,但仍然找不到它们。

通过搜索 stackoverflow 和其他地方,其他人似乎也遇到了类似的问题,而且似乎也有几种不同版本的墨迹/手写识别可用。例如,将其放入 Windows 8 应用商店应用程序似乎很容易。但根据 MSDN 文档,我的问题特别是关于 .NET 4.5 的 WPF 程序!

4

2 回答 2

4

我刚刚走的和你一样的路,我有一个解决方案。您所说的 MSDN Handwriting Recognition 链接根本不起作用,这是因为它依赖于 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 手写识别指南中列出的所有相同源代码,但buttonClick 实现除外。

3) 通过浏览并选择此 dll 添加对 WPF 应用程序的引用:C:\Program Files (x86)\Microsoft Tablet PC Platform SDK\Include\Microsoft.Ink.dll

4) 在 MainWindow.xaml.cs 文件的顶部添加“使用 Microsoft.Ink”语句,然后将以下代码添加到 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)。

于 2015-05-28T20:09:03.363 回答
0

请尝试以下适用于 Windows 8 的示例。 https://code.msdn.microsoft.com/windowsapps/InkPen-sample-in-CSharp-189ce853/sourcecode?fileId=60841&pathId=233613099

于 2014-12-16T14:57:37.037 回答