InkCanvasでは、文字を認識することが可能です。
文字認識を利用するには下準備が必要です。
最初に C:\Program Files\Reference Assemblies\Microsoft\Tablet PC\v1.7 にあるIAWinFX.dll, IACore.dll を参照設定に追加します。
次に、C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin にある IALoader.dll を参照設定に追加します。
最後に、System.Windows.Ink を Import(C#ではUsing)します。
文字を認識するには InkAnalyzer クラスのインスタンスを使用します。
はじめに、ジェスチャ認識したストロークを AddStrokes メソッドで追加し、ストロークを文字として認識するようにSetStrokesTypeメソッドに StrokeType.Writing を指定します。
最後に、Analyze メソッドを使用して認識した文字の解析を実行します。
解析を実行すると、描画されたストロークに近い文字の候補が作成されるので、GetRecognizedString メソッドで第1候補の文字を取得します。
そのほかの認識候補は GetAlternates メソッドを実行することで取得することが可能です。
下記はキャンバスに描いた文字を認識する例です。
XAMLの例
<StackPanel> <StackPanel Orientation="Horizontal"> <Button Name="btnAnalyze" Content="文字認識"/> </StackPanel> <InkCanvas Name="InkCanvas1" EditingMode="Ink" /> </StackPanel>
VBの例
'下記を追加 Imports System.Windows.Ink ' キャンバスに描かれた文字を認識する Private Sub btnAnalyze_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAnalyze.Click Dim theInkAnalyzer As New InkAnalyzer() 'キャンバスに描かれた文字を認識するためにアナライザにストロークをセット theInkAnalyzer.AddStrokes(InkCanvas1.Strokes) theInkAnalyzer.SetStrokesType(InkCanvas1.Strokes, StrokeType.Writing) '文字を解析 theInkAnalyzer.Analyze() '文字を解析した結果の第1候補を表示する MessageBox.Show(theInkAnalyzer.GetRecognizedString()) 'その他の候補を表示する Dim alternates As AnalysisAlternateCollection = theInkAnalyzer.GetAlternates() For Each alternate In alternates MessageBox.Show(alternate.RecognizedString) Next End Sub
C#の例
// 下記を追加 using System.Windows.Ink; /// キャンバスに描かれた文字を認識する private void btnAnalyze_Click(object sender, RoutedEventArgs e) { InkAnalyzer theInkAnalyzer = new InkAnalyzer(); // キャンバスに描かれた文字を認識するためにアナライザにストロークをセット theInkAnalyzer.AddStrokes(inkCanvas1.Strokes); theInkAnalyzer.SetStrokesType(inkCanvas1.Strokes, StrokeType.Writing); // 文字を解析 theInkAnalyzer.Analyze(); // 文字を解析した結果の第1候補を表示する MessageBox.Show(theInkAnalyzer.GetRecognizedString()); // その他の候補を表示する AnalysisAlternateCollection alternates = theInkAnalyzer.GetAlternates(); foreach (var alternate in alternates) MessageBox.Show(alternate.RecognizedString); }