始めまして。どうにもこうにもわからいのでお願いします!どなたか教えてください。
OCRを使って文字認識をする際に画像の読み込みができません。
下にかいたとうりに実行すると、「値が割り当てられていない」となってしまいます。
HBITMAP hBitmap;
//【 画像メモリの読み込み 】
if (!YndSetImage(hBitmap,NULL, &wErrorCode)){
//YndSetImage()の呼びだし
//hBitmap : DIBのハンドル
//NULL : 進捗表示をOCRSYS.DLLにまかせる
//&wErrorCode : エラーコードが返される
strErrorMsg.Format(画像が読み込めません [%d],wErrorCode);
AfxMessageBox(strErrorMsg);
YndEnd();// 【 終了処理 】YndEnd()の呼び出し
//
これはhBitmapの型がちがうとかでしょうか?
よろしくお願いいたします。
質問内容の YndSetImage() というのは、
http://ai2you.com/ocr/sdk/sdk2.asp に載っている関数のことですか?
もしそうなら、問い合わせ先となっている「エー・アイ・ソフト株式会社」へ
聞いて見るのも手と思われます。
「エー・アイ・ソフト株式会社」から販売されているSDKキットを
もっていない人にはわからないお話と思われます。
提示されたコードだけから判断するなら、変数 hBitmap に適切な値が入っていない
ということも考えられますね
適切な値が入っていない?とはどこに値を入れたらいいのでしょうか?(初心者すぎて
申し訳ありません・・・)
「ん」さんの紹介ページの説明から察すると
>//【 画像メモリの読み込み 】
ここの行に達するまでにきちんと「hBitmap」に値がセットされてますか?
つまり
>YndSetImage
を使用する前にメモリへ画像データがロードされていなければならないようですが
SDKは持ち合わせていないので文章からはこの程度しか回答できません
>適切な値が入っていない?とはどこに値を入れたらいいのでしょうか
これは、hBitmap は宣言しかしていないということですね?
ビットマップ等の GDI オブジェクトハンドルは宣言しただけでは具体的なものを示す
訳ではありません。これは int 型の変数についても同じことが言えます。
int i;
と宣言しただけでは変数 i の値が何かは判りませんね
ところで、あなたの開発条件(OS, VC++ のバージョンや MFC を使っているかどうか等)
がつかめないとこれ以上細かいことはお返事しにくいので、知らせてください
ハンドル hBitmap が DIB のハンドルという説明がついていますが DIB と DDB との
区別はわかりますか
それから、msdn ライブラリーで CreateDIBSection() 等についても調べて下さい
開発条件はwin98でMFC使用してます。
DIBはSee device-independent bitmap、
DDBはSee device-dependent bitmap. ??とかいてありました。
CreateDIBSection() はThe CreateDIBSection function creates a device-independent
bitmap (DIB) that applications can write to directly. The function gives you a
pointer to the location of the bitmap's bit values. You can supply a handle to
a file mapping object that the function will use to create the bitmap, or you
can let the system allocate the memory for the bitmap.でした。よくわかりませ
ん・・。
翻訳使えば一発。
CreateDIBSection()はThe CreateDIBSection機能は、適用が直接書くことができるデバイス
インディペンデントのビットマップ(DIB)を作成します。機能は、ビットマップのビット価値の
位置へあなたにポインターを与えます。ビットマップを作成するために機能が使用するファイル
写像オブジェクトにハンドルを供給することができます。あるいは、システムにビットマップに
メモリを分配させることができます。
>ハンドル hBitmap が DIB のハンドルという説明がついていますが DIB と DDB との
区別はわかりますか
あまりわかりません。
読み込むべき画像はどこにあるんですか?
ダイアログにあります。??
函数(かんすう、関数) YndSetImage() の引数の型を示してください
そうすれば hBitmap が DDB を指すのか DIB を指すのかおおよその見当がつくと思います
hBitmapはDIBでした!
>hBitmapはDIBでした!
DIB のハンドルの型が HBITMAP でいいのですか?
そうだった場合、どうすべきなのかお分かりですか?
YndSetImage()APIの概要説明を読むと、
hBitmapを使用してメモリ上から画像データを取得する
と記述されています。
nさんの質問の意図は、
hBitmapを使用して取得するDIB形式のイメージデータは
何処に置いてあるのか、ということですよ。
(1) メモリ上に表示可能な形で設定されている。
(2) 画像ファイルとして保存されている。
(3) アプリケーションのリソースとして保持している。
(1)の場合には、表示するためのビットマップハンドル値を
hBitmapに設定するだけでOKですが、
(2)と(3)の場合には、ファイル or リソースから
「読み込んで」ビットマップハンドルを「生成」し、
hBitmapに設定する必要があります。
で、その画像データはどこにおいてあるのですか?
# 画像がファイルとして保存されているんだったら、
# 最初からYndLoadImage()を使えばいいんじゃないの?
==