漫談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是輸入的筆畫坐標(biāo),upoints是坐標(biāo)的個數(shù),和HWXGUIDE的參數(shù)一樣,這里的坐標(biāo)也是屏幕坐標(biāo)系.timestamp是時間,一般情況下,我們可以設(shè)置為0.
需要注意的是,如果是多筆畫的文字,最好不要一次性將所有筆畫點(diǎn)陣通過HwxInput()輸入,否則最后的識別結(jié)果將會大相徑庭.因?yàn)樽R別引擎是一筆一劃進(jìn)行輸入識別的,如果多筆畫文字一次性輸入,引擎可能將所有筆畫當(dāng)成一個筆畫,從而導(dǎo)致識別結(jié)果異常不準(zhǔn)確.
7.調(diào)用HwxEndInput()告知引擎筆畫輸入結(jié)束,即將要進(jìn)行識別部分.
8.調(diào)用HwxProcess()讓引擎進(jìn)行識別處理.
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ù)雜,但實(shí)際上并非如此.
根據(jù)文檔,cAlt是期望的輪流返回的字符,iFirst是想要返回字符的索引,cBoxRes是返回的字符個數(shù).但實(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重新開始.
評論