DOBON.NET DOBON.NETプログラミング掲示板過去ログ

InkCanvas文字認識でエラー

環境/言語:[Windows 7/Vista MS2010 C# Winアプリ]
分類:[.NET]

お世話になります。

InkCanvasを利用したウインドウズアプリを他のパソコン(開発環境以外)で動かそうとしましたが、文字を書いて認識させようとすると「アプリは、動作を停止ました」と言ってきます。文字を書く状態までは、動作する。

何かインストール?物が必要?または何か.DLLなど必要でしょうか?

上記エラーは、
InkAnalyzer analyzer = new InkAnalyzer();
で起きているようです。
現在、ホルダーには、IAWinFX.dllとIAWinFX.xmlを置いています。必要かどうかもちょっとわかりませんが・・・

さらにInkApp.exe.configは、下記のとおりです。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>

よろしくお願いします。
単に.net frameworkのバージョン不一致のような気がしますが、
問題のあった端末のOSやframeworkのバージョンは何ですか?

それと、「アプリは、動作を停止ました」でエラーの詳細のようなものは確認できますか?
■No31664に返信(ゲルさんの記事)
> 単に.net frameworkのバージョン不一致のような気がしますが、
> 問題のあった端末のOSやframeworkのバージョンは何ですか?
>
> それと、「アプリは、動作を停止ました」でエラーの詳細のようなものは確認できますか?


お世話になります。

まず、.NET FrameWorkですが、.NET Framework 4 Client Profile がインストールされています。これ以外のバージョンは、ありません。もうひとつ他の64ビットマシーンもみましたが同じClient ProfileとExtended でした。バージョンンは、ともに4で他のバージョンはありません。

エラーメッセージがなくいきなり、「動作を停止しました」と出るので理由がわかりません。それで、MessageBox.Show("")を関数内に配置してどのへんか調べました。するとMessageBox.Show("1:Start");は表示して、次のMessageBox.Show("2:Init");は、表示せず、アプリは停止します。

下記にコードの一部を載せます。
private void recognize()
{
InkCanvas[] myCanvas = { inkcanvas1, inkCanvas2, inkCanvas3, inkCanvas4, inkCanvas5, inkCanvas6, inkCanvas7, inkCanvas8 }; // 名前の確認から
TextBox[] myBox = { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8 };
ComboBox[] myCombo = { comboBox1, comboBox2, comboBox3, comboBox4, comboBox5, comboBox6, comboBox7, comboBox8 };

MessageBox.Show("0:初め");

for (int i = 0; i < myCanvas.Length; ++i)
{
if (myCanvas[i].Strokes.Count == 0)
return;
MessageBox.Show("1:Start");   <- このメッセージは表示する
InkAnalyzer analyzer = new InkAnalyzer();
MessageBox.Show("2:Init"); <- このメッセージはでない。

// ヒントノードを作成 (Height="54" Width="65" 認識する範囲を指定すると精度が上がる???)
// ここでサイズを指定しないでインスタンスを作成するのがキモらしい
AnalysisHintNode hintNode = analyzer.CreateAnalysisHint();
MessageBox.Show("3:HintNode");
// InkRecognizerGuideの作成
// rows(第1引数)、columns(第2引数)は1文字なので1(rows、columnsは0にすると自由入力らしい)
// midline(第3引数)はおそらく正中線なので300/2で150
// writingBoxとdrawnBox関係(第4引数以降)は全面使用なので300×300の矩形
//(writingBoxはdrawnBoxよりも大きい矩形とすることで手書き時の余白が作成できるらしい)
hintNode.Guide = new InkRecognizerGuide(1, 1, 65 / 2, 0, 0, 65, 54, 0, 0, 65, 54);
MessageBox.Show("4:Guide");
   :
   :

InkCanvasが幾つもあるのは、一つのInkCanvasで複数の文字を認識させるより1つで1文字の方が認識率が高い?と思ったのでこのような形にしました。

DOBON.NET | プログラミング道 | プログラミング掲示板