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);
}
