漫談WinCE的手寫識別技術(一)
HwxALCValid(hrc,ALC_KANJI_ALL); //識別漢字
5.調用HwxSetContext()設置前文,提高文字識別率.如果沒有前文,可以不調用該函數.
6.調用HwxInput()加入文字筆畫.如果文字是多筆畫,則應多次調用該函數.
函數原型是:

BOOL HwxInput(

HRC hrc,

POINT* lppnt,

UINT upoints,

DWORD timestamp

);
lppnt是輸入的筆畫坐標,upoints是坐標的個數,和HWXGUIDE的參數一樣,這里的坐標也是屏幕坐標系.timestamp是時間,一般情況下,我們可以設置為0.
需要注意的是,如果是多筆畫的文字,最好不要一次性將所有筆畫點陣通過HwxInput()輸入,否則最后的識別結果將會大相徑庭.因為識別引擎是一筆一劃進行輸入識別的,如果多筆畫文字一次性輸入,引擎可能將所有筆畫當成一個筆畫,從而導致識別結果異常不準確.
7.調用HwxEndInput()告知引擎筆畫輸入結束,即將要進行識別部分.
8.調用HwxProcess()讓引擎進行識別處理.
9.調用HwxResultsAvailable()獲取識別的字符數.
根據文檔,HwxResultsAvailable()返回識別的字符數.然而在WinCE4.2中,調用hwxcht.dll的話,任何時候都是返回為0值,即使之后的函數能返回識別字符也依然如此.文檔中描述,該函數如果返回的是-1,則代表調用失敗,其它值代表可供使用的字符數.也許是WinCE4.2下識別引擎不完善的緣故,該函數根本沒有發揮文檔所描述的作用.
10.調用HwxGetResults()獲取結果.

INT32 HwxGetResults(

HRC hrc,

UINT cAlt,

UINT iFirst,

UINT cBoxRes,

HWXRESULTS* rgBoxResults

);
初看起來,該函數形參似乎特別復雜,但實際上并非如此.
根據文檔,cAlt是期望的輪流返回的字符,iFirst是想要返回字符的索引,cBoxRes是返回的字符個數.但實際上,cAlt起主導作用,比如說cBoxRes設置為1,而cAlt設置為10,則返回的字符個數依然為10.所以我在平常使用中,一般是將iFirst設為0,cBoxRes設為1,而cAlt設為所需返回的字符個數.
rgBoxResults指向儲存字符的緩沖區.不過,返回結果比較有意思,除了第一個rgBoxResults以外的所有結構的indxBox成員都儲存了返回字符.
比如返回五個字符'與子于飛干',則rgBoxResults的數組列數值為:
rgBoxResults[0].indxBox : 0
rgBoxResults[0].rgChar[0] : '與'
rgBoxResults[1].indxBox : '子'
rgBoxResults[1].rgChar[0] : '于'
rgBoxResults[2].indxBox : '飛'
rgBoxResults[2].rgChar[0] : '干'
11.調用 HwxDestroy()銷毀引擎,本次識別過程結束.如果需要繼續識別文字,從步驟2重新開始.
評論