基于高通手機平臺漢字顯示解決方案

發(fā)布時(shí)間:2010-9-21 11:07    發(fā)布者:eetech
關(guān)鍵詞: 高通 , 漢字 , 解決方案 , 手機 , 顯示
1 引 言  

高通作為全球領(lǐng)先CDMA手機平臺供應商,在國內得到廣大手機設計公司和手機廠(chǎng)商的青睞,其中包括德信無(wú)線(xiàn)、上海精佑、賽龍上海和UT斯達康等國內許多手機設計公司和手機廠(chǎng)商。為了支持國內市場(chǎng),漢字顯示是必不可少的,而高通手機平臺上沒(méi)有直接提供完備的漢字顯示解決方案,本文就這個(gè)熱點(diǎn)論題,通過(guò)對高通手機平臺字符顯示特點(diǎn)進(jìn)行了分析,具體地給出了基于BMP文件格式存儲漢字字庫的一種漢字顯示方案。

2 高通手機平臺Brew字符顯示原理

高通手機平臺Brew字符顯示由兩部分構成,一部分為上層應用提供一個(gè)統一的字符顯示接口部分,另一部分為某一種字符集或字體具體實(shí)現部分,這兩個(gè)部分是通過(guò)虛函數機制綁定在一起。在Brew字符顯示接口統一定義如下:

IFONT AddRef():用于引用記數功能;

IFONT_Release():釋放當前應用程序字符顯示實(shí)例;

IFONT_QueryInterface():他根據字符ID檢索當前應用程序字符顯示實(shí)例;

IFON_DrawText():他用于顯示具體的文本;

IFONT_MeasureText():他用于計算以象素為單位文本的大小和字符的總數目;

IFONT_GetFontInfo():他用于檢索字符相關(guān)信息,比如ascent和descent的值。

從上面的顯示接口定義可見(jiàn),系統的設計者將字符顯示接口視為一個(gè)脫離依賴(lài)具體字符顯示的轉換模塊,而字符具體實(shí)現部分則需要根據顯示接口每個(gè)接口函數給出一個(gè)標準實(shí)現,功能就是針對某一種字符實(shí)現文本顯示,計算文本大小,返回該種字體一些信息等。

例如:高通關(guān)于A(yíng)SCII字符顯示的參考設計中就定義了一組與顯示接口一致的一組函數:



然后通過(guò)指針賦值方式把這組函數與接口函數對應部分關(guān)聯(lián)起來(lái),即在函數AEEVarBitFont_NewFromBBF內部通過(guò)指針賦值方式使顯示接口部分與具體實(shí)現部分綁定在一起。

上層應用模塊調用字符顯示模塊的過(guò)程如下:



3 高通手機平臺上漢宇字庫的BMP文件存儲結構的設計

在手機平臺上漢字顯示可以采用國標碼或Unicode任何一種編碼方案,但為了信息交換方便,大多數手機開(kāi)發(fā)采用Unicode顯示方式,這里以Unicode為例來(lái)說(shuō)明。傳統的漢字存儲結構采用數組方式,明顯地,字符集這種存儲方式無(wú)法直觀(guān)地顯示給用戶(hù)和軟件開(kāi)發(fā)者,用戶(hù)和軟件開(kāi)發(fā)者也很難了解字符集內真正包含了那些字符,再者,當顯示漢字時(shí),系統需要將漢字字模存儲方式轉換為屏幕顯示方式,這將會(huì )增加系統開(kāi)銷(xiāo),降低運行效率。這里設計了用BMP文件格式來(lái)存儲漢字字庫,他保證整個(gè)存儲空間沒(méi)有明顯增加的同時(shí),能夠使用戶(hù)直觀(guān)地了解字符集內包含了那些字符,提高系統運行效率。

與現有其他的漢字存儲結構和漢字顯示方法相比,該方法具有3個(gè)主要特點(diǎn):

直觀(guān)性強 由于采用BMP圖片存儲結構方式,可以瀏覽漢字字符集中包含的漢字;

運行效率高 由于采用BMP圖片存儲結構方式,使得單個(gè)字符的字模存儲方式與屏幕顯示方式保持一致,當顯示漢字時(shí),不需要把漢字字模存儲方式轉換為屏幕顯示方式;

可移植性強、開(kāi)發(fā)周期較短 對上層應用模塊漢字顯示耦合得更好,由于這種方法盡可能地采用了Brew系統現有的字符顯示參考設計和已有的顯示接口機制。

由于漢字的Unicode編碼范圍為u4E00~u9FA5和uF900~uFA2D,如果不在這個(gè)范圍內就不是漢字了。為了討論方便,這里考慮漢字Unicode編碼范圍為u4E00~ugFA5,總計有20 901個(gè)漢字,他們是連續編碼的。

16*16漢字字庫BMP文件格式描述如下:

從上面的存儲結構可知,他實(shí)際就是一幅BMP格式的漢字字庫圖片,這幅BMP圖片就是漢字字符集的二進(jìn)制表示,他是從BMP圖片格式轉換過(guò)來(lái)的。這里每個(gè)字符字模對應BMP圖片中一個(gè)圖片片,字模存儲方式與屏幕顯示方式是一致的。

4 基于BMP文件存儲結構漢字顯示實(shí)現

實(shí)現本地漢字顯示較早的一種方案基于Native UI,他不需依賴(lài)Brew顯示接口。目前較多的漢字顯示方案會(huì )涉及到Brew顯示接口,常見(jiàn)漢字顯示解決方案為:

(1) 基于Native UI方案,實(shí)現漢字顯示。完全自己開(kāi)發(fā)一套點(diǎn)陣存儲、點(diǎn)陣獲取、點(diǎn)陣顯示、漢字顯示函數,使用者使用特定的漢字顯示函數把漢字顯示出來(lái)。該方法具有最大的靈活性,甚至不理睬Brew任何顯示接口機制,直接在上層組件里實(shí)現,但這種方法使程序可移植性比較差,對第三方應用程序漢字顯示支持也不方便。   

(2) 基于Brew方案,實(shí)現漢字顯示。自己開(kāi)發(fā)點(diǎn)陣存儲、點(diǎn)陣獲取、點(diǎn)陣顯示,改造Brew的顯示接口函數,使其能判斷漢字碼,一旦判斷出漢字碼,則使用自己開(kāi)發(fā)的點(diǎn)陣獲取、點(diǎn)陣顯示等把漢字顯示出來(lái)。然后把該自己開(kāi)發(fā)的顯示函數綁接到Brew顯示接口上。該方法對點(diǎn)陣的操作更加靈活,工作量較大,開(kāi)發(fā)周期較長(cháng),這種方法比較適用已有成熟的點(diǎn)陣操作方法開(kāi)發(fā)者。

這里利用Brew對BMP文件格式的支持,使用BMP文件格式實(shí)現對漢字的點(diǎn)陣存儲、點(diǎn)陣獲取、點(diǎn)陣顯示的全過(guò)程,并使用Brew的顯示函數實(shí)現漢字碼到漢字顯示。這種方法盡可能地使用了Brew系統現有的字符顯示參考設計和已有的顯示接口機制,開(kāi)發(fā)周期較短,是最根本的解決方法,他使得Brew的其他上層應用模塊能很方便實(shí)現漢字顯示。這種方法使程序通用性好,可移植性強,支持第三方應用程序開(kāi)發(fā)也較方便等特點(diǎn)。

為了支持第三方軟件廠(chǎng)商集成不同國家文字顯示,高通手機平臺提供一個(gè)綁定顯示接口和對應的實(shí)現部分的接口函數,通過(guò)這個(gè)函數就可以把各種不同文字類(lèi)型顯示方式綁定到Brew統一的顯示接口上,軟件廠(chǎng)商只需要根據具體文字的顯示方式實(shí)現具體的接口函數即可。這個(gè)接口如下:




各個(gè)參數介紹如下

IFont**ppif:漢字接口函數;

const uint16*pwGlyphs:漢字碼表;

int cntGlyphs:漢字總數目;

const CHAR*pbyBitmap:用BMP表示的漢字字庫;

int cbBitmap:用BMP表示的漢字字庫總的字節數目;

int xCHARWid:每個(gè)漢字寬度;

int yCHARHeight:每個(gè)漢字高度;

int yCHARDescent:點(diǎn)陣打點(diǎn)開(kāi)始位置在baseline之下的偏移;

uint16 wUndefGlyph:未定義的ASCII字符數目;

int nHalfCHARs:ASCII字符數目;

UTFONTTYPE FontType:漢字類(lèi)型。

為了實(shí)現BMP文件格式存儲結構字庫的漢字顯示方式,主要工作集中于下面兩個(gè)方面:

(1) 定義創(chuàng )建字體實(shí)例接口函數

在Brew方案中,上層應用模塊都是通過(guò)ID創(chuàng )建字體實(shí)例,這里可以按照如下方式定義創(chuàng )建字體接口函數。



(2) 實(shí)現漢字顯示一組具體的接口函數

由于Brew方案中已經(jīng)實(shí)現了基于BMP格式對ASCII碼顯示支持方式,所以顯示接口函數IFONT_Ad-dRef(),IFONT_Release(),IFONT_QueryInterface的功能已經(jīng)實(shí)現,而漢字顯示方式這三個(gè)函數要實(shí)現的功能與ASCII是一致的,不需要改動(dòng)。函數IFONT GetFon-tInfo對于漢字顯示不適用,因為漢字的ascent和descent的值為0,這里只要考慮IFONT_DrawText()和IFONTMeasureText()兩個(gè)函數的實(shí)現問(wèn)題。

為了實(shí)現IFONT_MeasureText(),在他對應的實(shí)現函數內部增加計算一個(gè)漢字寬度的相應代碼。

為了實(shí)現IFONT_DrawText(),由于Brew提供了基于BMP格式對ASCII碼顯示支持方式,對于漢字顯示關(guān)鍵是計算漢字UNICODE碼與BMP格式的漢字字模的對應關(guān)系。由于漢字的UNICODE碼是連續,在BMP圖片中字模已經(jīng)按照UNICODE碼順序排列,對于任何漢字只要計算他與第一個(gè)漢字(4E00)的偏移量,然后根據偏移量直接拷貝BMP圖片中該字符的圖片片到顯示緩沖區即可,不需要把單個(gè)字符字模轉換為屏幕顯示方式,提高了系統顯示速度。

5 注意事項

在實(shí)際開(kāi)發(fā)中,手機軟件開(kāi)發(fā)商一般以點(diǎn)陣形式從第三方購買(mǎi)字庫,為了能夠應用第三方字庫到高通手機平臺上需要轉換成BMP格式的文件。另一個(gè)要注意的問(wèn)題是這里把漢字顯示作為單獨的一個(gè)字符集來(lái)考慮的,在實(shí)際中可以把ASCII,漢字和漢字偏旁部首構成一個(gè)字符集來(lái)考慮。只要根據不同的碼值分別計算他們各自對應BMP圖形的偏移量即可。

6 結 語(yǔ)

本文就高通手機平臺關(guān)于漢字存儲和漢字顯示方式這一熱門(mén)論題進(jìn)行了詳盡討論,論述高通手機平臺Brew字符顯示原理、傳統漢字存儲結構的不足和不同漢字顯示方案的特點(diǎn),并在論述這些原理和方案的同時(shí)提出了一種具有通用強,移植方便和容易擴展的漢字顯示方案,也提出了在實(shí)際應用需要注意問(wèn)題。
本文地址:http://selenalain.com/thread-28400-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)在線(xiàn)工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页