VxWorks5.5 平臺(tái)下矢量字體顯示的實(shí)現(xiàn)
WindML 字體顯示分雙字節(jié)顯示和單字節(jié)顯示兩種方式,雙字節(jié)顯示是兩個(gè)字節(jié)作為字體編碼對(duì)字庫(kù)進(jìn)行查詢,找到字符位圖并顯示;單字節(jié)顯示是單個(gè)字節(jié)作為字體編碼對(duì)字庫(kù)進(jìn)行查詢,找到字符位圖并顯示。當(dāng)英文字符顯示時(shí),可以使用單字節(jié)顯示或雙字節(jié)顯示,當(dāng)中文字符顯示或中英文混合字符顯示時(shí)必須使用雙字節(jié)顯示。
VxWorks 下字體采用GB2312 編碼,中文字符編碼的每個(gè)字節(jié)都大于0x80,英文字符編碼都小于0x80,在進(jìn)行雙字節(jié)顯示時(shí),需要將單字節(jié)字符轉(zhuǎn)換成雙字節(jié)字符。在字符轉(zhuǎn)換時(shí),先獲取整個(gè)字符串長(zhǎng)度,再判斷每個(gè)字節(jié)是否大于0x80,如果小于0x80,則將單字節(jié)擴(kuò)展成雙字節(jié);如果大于0x80,則將這個(gè)字節(jié)與后個(gè)字節(jié)組合成一個(gè)雙字節(jié);計(jì)算雙字節(jié)數(shù)并返回,如上圖2 所示。
圖2 單字節(jié)字符轉(zhuǎn)換成雙字節(jié)字符。
3.3 字體編碼轉(zhuǎn)換
VxWorks5.5 下漢字采用GB2312 編碼, 而FreeType 在處理漢字時(shí)只能識(shí)別UNICode 編碼,在處理漢字前需要將GB2312 編碼先轉(zhuǎn)換成Unicode 編碼,GB2312 與Unicode 的編碼轉(zhuǎn)換表采用二維數(shù)組保存數(shù)據(jù),共有7000 多組對(duì)應(yīng)項(xiàng),如果采用遍歷數(shù)組的方式來(lái)進(jìn)行編碼轉(zhuǎn)換,那么平均每個(gè)漢字編碼轉(zhuǎn)換需要做3000 多次的編碼比較,這非常影響漢字的處理速度。
為了提高編碼轉(zhuǎn)換的處理速度,編碼轉(zhuǎn)換時(shí)采用折半查找方式來(lái)實(shí)現(xiàn),使用折半查找需要先將GB2312編碼從小到大排列,每個(gè)GB2312 編碼對(duì)應(yīng)一個(gè)Unicode 編碼。在使用折半查找時(shí),先取first=0 end=數(shù)組長(zhǎng)度,然后(first+end)/2 得到一個(gè)中間編號(hào),再通過中間編號(hào)獲取相應(yīng)的GB2312 編碼和顯示漢字編碼比較大小,如果中間值大,則將first=0 end=中間編碼組合再進(jìn)行折半查找;如果中間值小,則將first=中間編碼 end=數(shù)組長(zhǎng)度 組合再進(jìn)行折半查找;如果相等,則將GB2312 編碼對(duì)應(yīng)的Unicode 編碼提交程序處理。
使用折半查找一個(gè)漢字最多只需查找13 次,大大提高了漢字Unicode 編碼的查找速度,加速了漢字顯示。
矢量控制相關(guān)文章:矢量控制原理
評(píng)論