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

BOOL HwxInput(

HRC hrc,

POINT* lppnt,

UINT upoints,

DWORD timestamp

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

INT32 HwxGetResults(

HRC hrc,

UINT cAlt,

UINT iFirst,

UINT cBoxRes,

HWXRESULTS* rgBoxResults

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