當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]矢量字庫在嵌入式機(jī)頂盒中的應(yīng)用

   摘要:介紹嵌入式數(shù)字衛(wèi)星接收機(jī)的字符顯示原理。提出一種提取Windows矢量字庫信息以及將其轉(zhuǎn)換為點(diǎn)陣字庫格式的方法。給出主要模塊的流程圖和VC程序?qū)崿F(xiàn)。在DVB-S接收機(jī)頂盒系統(tǒng)中的應(yīng)用驗(yàn)證了該方法的有效性。

    關(guān)鍵詞:矢量字庫 機(jī)頂盒 字符轉(zhuǎn)換

引言

在當(dāng)前嵌入式系統(tǒng)設(shè)計(jì)中,廣泛涉及到字符和圖標(biāo)的顯示。過去的方法通常是使用硬件自帶字庫或者轉(zhuǎn)換中文操作系統(tǒng)(例如UCDOS)的點(diǎn)陣字庫,但隨著嵌入式開發(fā)技術(shù)的發(fā)展,人們對用戶界的要求也越來截止高,大小固定、字體有限、使用不便的點(diǎn)陣字庫已經(jīng)難再滿足要求。于是眾多開發(fā)人員將目光投向了Windows操作系統(tǒng)豐富的字庫和圖標(biāo)資源,以Widnows 2000系統(tǒng)為例,其OpenType矢量字庫有基于Unicode內(nèi)碼的四萬多個(gè)字符,特殊符號以及近百種字體可以選用。但是Windows系統(tǒng)結(jié)構(gòu)復(fù)雜,難以直接提取矢量字庫,并且矢量字庫解析算法涉及到Micorosoft和Adobe公司OpenType字體專利,這些問題為Windows字庫的使用帶來了很大的困難。

在筆者參與的DVB-S數(shù)字衛(wèi)星接收機(jī)頂盒用戶界面的設(shè)計(jì)工作中,也遇到了同樣的問題。按照設(shè)計(jì)要求,需要用到一套完備的,支持包括俄、德、拉丁、阿拉伯等多種語言和特殊符號的小型字庫,但是難以找到合適的現(xiàn)成字庫,在參考了一些商業(yè)字模提取軟件的功能后,提出了一種提取Windows矢量字符以及圖標(biāo)資源的方法,并用Visual C++6.0程序?qū)崿F(xiàn)。實(shí)際應(yīng)用表明,用本方法生成的字庫字形美觀,字體多樣,完全可以替代商業(yè)字庫,同時(shí)還具有使用方便,便于擴(kuò)展等優(yōu)點(diǎn)。

1 機(jī)頂盒圖文顯示原理

機(jī)頂盒中文字和位圖的顯示是通過OSD(圖文屏顯技術(shù))模塊完成的。傳統(tǒng)的屏顯示OSD主要應(yīng)用在VCR、LD和電視機(jī)上,采用專用的芯片修改屏幕上指定部位的信號的角度和亮度,實(shí)現(xiàn)模擬視頻的同步改變,從而達(dá)到顯示的目的。含有OSD的視頻輸出信號在屏幕上從底向上以6個(gè)層次顯示:邊界顏色、靜止視頻圖像、活動視頻圖像、OSD背窗口、OSD位圖區(qū)域和OSD硬件游標(biāo)。本文介紹的機(jī)頂盒系統(tǒng)是基于ST公司的方案,接收機(jī)軟件是ST公司為其數(shù)字衛(wèi)星接收機(jī)硬件評估板配套提供的。其主芯片采用Sti5518微控制器,內(nèi)部集成OSD處理單元。OSD功能模塊框圖如圖1所示。

圖1

    OSD功能模塊位于NTSC/PAL/SECAM編碼之前,包括一張顏色查找表(LUTs)、Alpha混合濾波器和控制邏輯單元,所有子功能先于將信息從重建緩沖區(qū)傳到SDRAM或與其它靜態(tài)圖像混合前執(zhí)行。

當(dāng)要輸出圖文信息時(shí),將字符圖標(biāo)的位圖信息送至OSD位圖區(qū)域的相應(yīng)位置。OSD位圖區(qū)域由其頭部定義,每個(gè)OSD頭主要包括OSD顯示短形區(qū)域的起始位置、大小及兩個(gè)分別指向頂場和底場圖像數(shù)據(jù)的指針(這是針對隔行掃描顯示方式;對于逐行掃描,這兩個(gè)指針向同一塊內(nèi)存區(qū)域),還有一個(gè)指向下一個(gè)OSD位圖數(shù)據(jù)頭的指針。由于采用了這種基于指針的OSD數(shù)據(jù)管理結(jié)構(gòu),理論上OSD位圖數(shù)據(jù)塊的數(shù)目不受限制,實(shí)際上它要受到內(nèi)存大小的限制。頭部不僅定義了位圖區(qū)域的尺寸、位置以及及顏色信息,而且提供了顏色表更新等功能。字符的顏色設(shè)置使用OSD處理單元(LUT)的顏色查找表,也稱做調(diào)色板。2位的LUT意味著有4種顏色可以選擇,并且位圖中的每個(gè)像素僅占有存儲單元的2位。如果是透明文字,還要把第一個(gè)像素的調(diào)色板顏色值定為透明色掩碼值,這個(gè)過程由Alpha混合處理完成。如果輸出像素不在OSD區(qū)域,停止處理視頻接口處理器數(shù)據(jù);如果輸出像素在OSD區(qū)域,OSD數(shù)據(jù)或OSD和視頻接口處理數(shù)據(jù)的混合數(shù)據(jù)經(jīng)Alpha混合濾波處理后以16位YC(Cb,Cr)格式傳輸。對于調(diào)色板顏色值是透明的情況,則直接傳送視頻數(shù)據(jù)而略過OSD位圖數(shù)據(jù)。

OSD的軟件部分可以分為兩部分:硬件抽象層和圖形函數(shù)接口。OSD模塊軟件部分為整個(gè)系統(tǒng)軟件部分提供一系列的圖形函數(shù)接口,是實(shí)現(xiàn)圖文顯示的基礎(chǔ),也是給用戶提供一個(gè)方便直觀的圖形文字交互方式的保障。本文中硬件抽象層為ST公司提供的STAPI函數(shù)庫,圖形函數(shù)接口在中間件的基礎(chǔ)上自行開發(fā)。

由此可見,在機(jī)頂盒系統(tǒng)中字符輸出有三個(gè)主要步驟:①系統(tǒng)專用字庫的建立;②字符數(shù)據(jù)的查找;③調(diào)用OSD模塊功能將字符在屏幕上輸出。下面介紹如何通過轉(zhuǎn)換Windows矢量字符,建立一套功能完善,使用方便的字庫系統(tǒng)。

2 提取矢量字符

Winodws矢量字庫存儲漢字的矢量圖形。因?yàn)榇鎯Φ氖枪P樣條,對于字符做旋轉(zhuǎn)、縮放、甚至三維拉伸都不會產(chǎn)生失真,但在字符顯示的時(shí)候需要計(jì)算樣條曲線而增加了計(jì)算量。由于嵌入式系統(tǒng)只是針對專一控制應(yīng)用的系統(tǒng),處理器的性能和資源還不如PC機(jī),一般使用的仍然是點(diǎn)陣字庫。本文介紹的DVB-S機(jī)頂盒系統(tǒng)同樣沒有直接使用矢量字庫;而是通過提取Windows中矢量字庫的方法將矢量字符轉(zhuǎn)換成相應(yīng)的點(diǎn)陣信息。在本開發(fā)方案中,字庫文件中所有漢字的字模信息和圖標(biāo)信息被存儲到兩個(gè)大的數(shù)組中,并作為一個(gè)頭文件包含在漢字顯示模塊中。利用計(jì)算出的偏移值得到字模數(shù)組中的下標(biāo),從而得到漢字存放在數(shù)組中的字模點(diǎn)陣信息。使用程序存儲器空間做字庫,這在漢字用量不大的情況下是一種較完美的解決方案。本系統(tǒng)中負(fù)責(zé)屏顯功能的API函烽是STOSD函數(shù)庫,里面已把位圖的寬度定義為32像素的整數(shù)倍。這是由于系統(tǒng)的內(nèi)存操作函數(shù)只能對16字節(jié)整數(shù)倍的塊進(jìn)行拷貝操作,否則內(nèi)存只能一個(gè)字節(jié)一個(gè)字節(jié)地填充,速度非常慢。例如在16色的調(diào)色板情況下,無論是24×24點(diǎn)陣還是32×32點(diǎn)陣,基于字符單元寬度統(tǒng)一為32像素。一個(gè)寬為32像素,高為28像素的基本字符點(diǎn)陣信息需要一個(gè)大小為28字節(jié)的整型數(shù)組為記錄。以開發(fā)方案為例,大小為500字符的24×24點(diǎn)陣小型字庫將需要24 000字節(jié)的ROM空間。

    轉(zhuǎn)換的關(guān)鍵是要獲得矢量字庫的點(diǎn)陣信息。程序中,回避了較困難的直接解板矢量字庫問題,巧妙地從PC顯示緩沖區(qū)中獲得位映像數(shù)據(jù),再將其轉(zhuǎn)換成OSD模塊函數(shù)支持的點(diǎn)陣格式。位圖法轉(zhuǎn)換矢量字符的算法如下。

①把漢字以位圖的形式顯示在指定的32×28的點(diǎn)陣區(qū)域內(nèi),然后按行提取像素點(diǎn),每1行以8個(gè)像素點(diǎn)為1個(gè)字節(jié)(1行4個(gè)字節(jié)),以二進(jìn)制補(bǔ)碼的形式分別存放在4個(gè)字節(jié)里。最低字節(jié)存放每一點(diǎn)陣行的前8位。每一行結(jié)束后將其轉(zhuǎn)化為十六進(jìn)制點(diǎn)陣碼并保存于一個(gè)整型數(shù)組中。

②整個(gè)字符轉(zhuǎn)換結(jié)束后放在字庫信息文件里,生成一個(gè)字符區(qū)域地址映射表,為后面的字符分組查找提供方便。同時(shí)生成字符寬度、高度、字體、風(fēng)格以及代碼頁等相關(guān)信息。

西文“特殊”字符(拉丁字符集里的第128~255字符,碼值大于0x80)的轉(zhuǎn)換是提取矢量字符過程中需要注意的問題。通過VC 6.0開發(fā)環(huán)境可以把執(zhí)行文件編譯成Unicode和ASCII兩片版本。對于Unicode內(nèi)碼版本的應(yīng)用程序,Windows 2000對其字符的顯示有著很好的支持,但對于ASCII版本的應(yīng)用程序則存在一定問題。當(dāng)在應(yīng)征程序中輸入字符時(shí),因編輯框只支持單字節(jié),系統(tǒng)會將雙字節(jié)的Unicode輸入字符重新解釋,造成的后果是程序無法正確接收這些字符,輸出的特殊字符也一律被顯示為“?”。本文的矢量字庫提取程序?yàn)榱撕蚖in9x操作系統(tǒng)兼容而被設(shè)計(jì)為ASCII版本。為了解決上述問題,程序沿用了代碼頁的方法。代碼頁是一個(gè)內(nèi)部表,操作系統(tǒng)將字符、數(shù)字和標(biāo)點(diǎn)等符號映射為字符編號,不同的代碼而支持不同國家所使用的字符集。代碼頁通過編號引用,例如,代碼頁932代表日 本字符集,950代表繁體中文字符集。由代碼頁確定字符集,首先把需要轉(zhuǎn)換的特殊矢量字符編輯后以RTF富文本格式的文本保存,矢量字符提取程序打開RTF文件并插入文本到視圖中,讀取每個(gè)特殊字符的值并轉(zhuǎn)換成十六進(jìn)制。然后讀取RTF文件內(nèi)的代碼頁編號和字體,尺寸和風(fēng)格等標(biāo)簽。根據(jù)代碼頁確定對應(yīng)的字符集,根據(jù)標(biāo)簽設(shè)置顯示字符屬性。最后按一般字符的輸出方法將特殊字符顯示在視圖中。

3 程序?qū)崿F(xiàn)

3.1 功能設(shè)計(jì)和界面設(shè)計(jì)

主程序?yàn)镸FC生成的SDI單文檔程序。視圖類由CscrollView派生,顯示的字符和位圖可以自由地放大和縮小,當(dāng)字符超過窗口大小時(shí)視圖自動滾動,以滿足提取不同大小庫點(diǎn)陣的需要,用一個(gè)RichEditBox控件來接收輸入字符。添加靜態(tài)控件,顯示字符點(diǎn)陣的寬、高等信息。在菜單欄分別添加插入位圖、插入圖標(biāo)、插入特殊字符、字體設(shè)置、字體放大和字體縮小等菜單項(xiàng)。

程序的界面如圖2所示。圖中程序正在提取阿拉伯矢量字符集,使用該程序時(shí)直接在該工具的圖形操作界面下輸入需要提取的字符或者插入位圖和圖標(biāo)。待調(diào)整好全部所需的字符圖標(biāo)后點(diǎn)擊保存,程序自動轉(zhuǎn)換矢量字符和圖形并生成存入文件。實(shí)現(xiàn)的功能有:①能在視圖顯示RichEditBox控件內(nèi)輸入英文、漢字等矢量字符,并通過圖形設(shè)備上下文CDC讀取視圖的點(diǎn)陣信息;②能讀取所有插入RTF文本內(nèi)的特殊字體點(diǎn)陣信息;③能讀取插入的位圖和圖標(biāo)點(diǎn)陣信息;④能將點(diǎn)陣信息保存在font.h文件中,并添加字庫索引表和字符寬、高、字體等信息。

    3.2 主要類和模塊

CfontView為CscrollView派生類,負(fù)責(zé)字符和圖標(biāo)的縮放顯示,CfontModule類封裝了字符串操作函數(shù),CtextSetDlg類負(fù)責(zé)字符屬性的設(shè)定。程序中點(diǎn)陣信息的數(shù)據(jù)、位圖和圖標(biāo)的數(shù)據(jù)和字符串?dāng)?shù)據(jù)分別封裝在類CdotMatrix、CimageElemnt和CwordElement中。在主要的模塊函數(shù)里,Create_Text_Dot_Matrix和Create_Bmp_Dot_Matrix函數(shù)是本程序的核心函數(shù)。功能是在內(nèi)存中形式位映射數(shù)據(jù),完成矢量漢字或矢量圖形向點(diǎn)陣數(shù)據(jù)的轉(zhuǎn)換。設(shè)向量圖型尺寸寬width像素,高h(yuǎn)eight像素,程序流程如下:

①計(jì)算該位圖對應(yīng)的緩沖區(qū)尺寸。每行長度為:BytePerLine=(width+1)/8,緩沖區(qū)大小為Buffersize=BytePerLine*height。

②申請內(nèi)存緩沖區(qū)。如果內(nèi)存不足以容納整 個(gè)圖形,則可以分段處理。

BufferPtr=(unsigned char*)malloc(BufferSize)。

③計(jì)算坐標(biāo)點(diǎn)在所申請內(nèi)存緩沖區(qū)的偏移量和屏蔽位。設(shè)原點(diǎn)(0,0)在內(nèi)存中的偏移量為0,則圖中任意一點(diǎn)P(x,y)相對于原點(diǎn)(0,0)的偏移量為

offset=y*BytePerLine+x/8,該點(diǎn)對應(yīng)的字節(jié)內(nèi)屏蔽位為mask=0x80>>(X%8)。

④讀取點(diǎn)P(x,y)在內(nèi)存中對應(yīng)的顏色值Value,讀取所在的字節(jié)。

byte=(unsigned char)*(Bufferptr+offset),取該點(diǎn)對應(yīng)的位,

Value=byte & mask最后得到點(diǎn)陣信息,輸出到屏幕或磁盤文件。

3.3 主程序流程

主程序流程圖如圖3所示。首先進(jìn)入響應(yīng)用戶消息分支,當(dāng)從編輯框輸入標(biāo)準(zhǔn)漢字或ASCII字符,程序檢查字符同碼判斷字符有效性,若滿足條件則跳至顯示部分;當(dāng)用戶從外部磁盤插入圖標(biāo)或位圖圖片,程序直接讀入文件數(shù)據(jù);如果插入的是特殊字符則進(jìn)入RTF格式文本解析部分,得到特殊字符的代碼頁、字體、大小等信息。然后將字符圖標(biāo)信息在視圖中顯示,此時(shí)可通過圖形界面調(diào)整字符外觀。通過獲得內(nèi)存中圖像信息形成位映射數(shù)據(jù),計(jì)算點(diǎn)陣數(shù)據(jù)。最后將字庫點(diǎn)陣和索引表、字體、大小等附加信息按頭文件格式保存到字庫文件中。程序源代碼見網(wǎng)站www.dpj.com.cn。

4 結(jié)論

實(shí)際應(yīng)用中,本方法可以有關(guān)鍵人物 地提取Windows環(huán)境下矢量字庫的字模,滿足嵌入式機(jī)頂盒系統(tǒng)的開發(fā)需要。字模提取程序具有多種功能,可以生成各種大小風(fēng)格的字體、符號和圖形點(diǎn)陣信息,從而使機(jī)頂盒能利用Windows中豐富的字體和圖像資源,顯示更為精彩的圖形用戶界面。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉