【问题标题】:WPF Handwriting .NET 4.5 Windows 8: Missing IAWinFX.dll and othersWPF 手写 .NET 4.5 Windows 8:缺少 IAWinFX.dll 等
【发布时间】:2023-03-15 15:42:01
【问题描述】:

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

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

根据帮助应该很容易:

MSDN: Handwriting Recognition

然而,当我读到这一段时,我就卡住了。

添加对 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 程序!

【问题讨论】:

    标签: c# wpf windows-8.1 .net-4.5 handwriting-recognition


    【解决方案1】:

    【讨论】:

    • 谢谢。系统要求是 Windows XP。它是否适用于 Windows 8 - 我想我可以尝试一下!但它已经有 10 年历史了 - 这是 MS 拥有的最新技术,还是只是充当我计算机上更现代识别器的接口?
    • 好的 - 您的第一个只是链接到 2004 年的 Tablet SDK。它确实可以在 Windows 8 上安装和工作,它包括一个使用 Windows 窗体的工作示例。这与 WPF 不同。第二个示例适用于 Windows 应用商店应用程序。通过粗略搜索 MSDN 很容易找到这两个链接。我的印象是您实际上还没有尝试过,而是试图模仿 lmgtfy dot com
    【解决方案2】:

    我刚走的路和你一模一样,我有一个解决办法。您所说的 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 Handwriting Recognition 指南中列出的所有相同源代码,除了 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)。

    【讨论】:

    • 第 2 步中的 MSDN 链接已略微更改为:msdn.microsoft.com/en-us/library/vstudio/…
    • 这在带有 .NET 4.5.2 的 Surface Pro 上使用 Windows 10 非常有效。谢谢。只是为了让大家知道我在我的系统上搜索了 Microsoft.Ink.dll,并在 Program Files\Common Files\Microsoft Shared\Ink 中找到了它。无需安装任何东西,只需引用文件并使用 buttonClick 代码即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2014-02-05
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多