日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] //========================================================================//TITLE:// 漫談WinCE的手寫識別技術(一)//AUTHOR:// norains//DATE:// Wednesday 24-Janua

 //========================================================================

//TITLE:

// 漫談WinCE的手寫識別技術(一)

//AUTHOR:

// norains

//DATE:

// Wednesday 24-January -2007

//Environment:

// EVC4.0 + Standard SDK

//========================================================================

WinCE從4.0開始,集成了手寫識別輸入法,可以識別繁體中文,日文和韓文.因此如果在WinCE下采用相應的API函數重寫上述三種語言的手寫識別輸入似乎顯得多此一舉.但多余并不代表沒有了解的價值,今天,就讓我們抽絲剝繭來探究WinCE下的手寫識別吧!

大體上來說,調用WinCE自帶的識別引擎進行文字識別需要經過如下十個步驟:

1.調用HwxConfig ()函數初始化識別引擎.在每個應用程序中,該初始化只需要調用一次.

2.調用HwxCreate()創(chuàng)建識別引擎句柄.

函數原型為:HRC HwxCreate(HRC hrc).該函數有個形參hrc,保存的是已存在的識別引擎句柄.如果傳入該形參,則可以根據已存在的引擎的設置來創(chuàng)建新的識別引擎.當然通常情況下我們僅僅是創(chuàng)建一個新的引擎,所以該函數更多情況下是不使用形參:

3.調用HwxSetGuide()函數來設置識別框的范圍.

設置該識別框范圍的重要性不言而喻,因為如果設置不恰當,則直接導致識別出錯甚至無法識別.

該函數傳入的形參是一個HWXGUIDE結構,該結構包含了識別框的一切信息:

typedef struct tagHWXGUIDE {

UINT cHorzBox;

UINT cVertBox;

INT xOrigin;

INT yOrigin;

UINT cxBox;

UINT cyBox;

UINT cxOffset;

UINT cyOffset;

UINT cxWriting;

UINT cyWriting;

UINT cyMid;

UINT cyBase;

UINT nDir;

} HWXGUIDE, *PHWXGUIDE;

如果用文字來描述各個形參的含義,我實在沒這個能力讓語言讀起來不覺得乏味,所以最簡單最直接最直觀的方法,我還是用圖片來標識出各個參數的含義,至少應該不會讓腦袋覺得發(fā)暈:

xOriginy,Origin分別定義了識別框的起始坐標,而cxBox,cyBox則分別定義了識別框的長度和寬度.需要注意的是,這四個參數是以屏幕坐標為基準,如果我們獲得的是應用程序窗口的坐標,在賦值之前,我們需要調用MapWindowPoints()進行轉換.當然,相同的道理也同樣運用于該結構的其它形參.

nDir定義了書寫的順序,我們一般使用HWX_HORIZONTAL,表明書寫方式是水平書寫.當然,如果有特殊要求,我們還可以設置HWX_BIDIRECTIONAL或HWX_VERTICAL.

4.調用HwxALCValid()和HwxALCPriority()定義識別的標準.

HwxALCValid()用來定義識別字符的范圍,HwxALCPriority()則是定義返回字符的優(yōu)先級.

根據幫助文檔,可以識別的字符文字為:簡體中文,繁體中文,日文,韓文和英文.但在實際使用中,卻是無法正確識別簡體中文,這不能不說是一個遺憾.在平時應用中,我們一般只需識別一種文字,此時我們可以只是簡單地設置HwxALCValid()即可:[!--empirenews.page--]

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下識別引擎不完善的緣故,該函數根本沒有發(fā)揮文檔所描述的作用.

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指向儲存字符的緩沖區(qū).不過,返回結果比較有意思,除了第一個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()銷毀引擎,本次識別過程結束.如果需要繼續(xù)識別文字,從步驟2重新開始.

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉