精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Windows矢量字庫應用在嵌入式機頂盒中的設計

電子設計 ? 作者:電子設計 ? 2018-09-20 07:31 ? 次閱讀

引言

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

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

1 機頂盒圖文顯示原理

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

Windows矢量字庫應用在嵌入式機頂盒中的設計

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

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

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

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

2 提取矢量字符

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

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

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

②整個字符轉換結束后放在字庫信息文件里,生成一個字符區域地址映射表,為后面的字符分組查找提供方便。同時生成字符寬度、高度、字體、風格以及代碼頁等相關信息。

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

3 程序實現

3.1 功能設計和界面設計

主程序為MFC生成的SDI單文檔程序。視圖類由CscrollView派生,顯示的字符和位圖可以自由地放大和縮小,當字符超過窗口大小時視圖自動滾動,以滿足提取不同大小庫點陣的需要,用一個RichEditBox控件來接收輸入字符。添加靜態控件,顯示字符點陣的寬、高等信息。在菜單欄分別添加插入位圖、插入圖標、插入特殊字符、字體設置、字體放大和字體縮小等菜單項。

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

3.2 主要類和模塊

CfontView為CscrollView派生類,負責字符和圖標的縮放顯示,CfontModule類封裝了字符串操作函數,CtextSetDlg類負責字符屬性的設定。程序中點陣信息的數據、位圖和圖標的數據和字符串數據分別封裝在類CdotMatrix、CimageElemnt和CwordElement中。在主要的模塊函數里,Create_Text_Dot_Matrix和Create_Bmp_Dot_Matrix函數是本程序的核心函數。功能是在內存中形式位映射數據,完成矢量漢字或矢量圖形向點陣數據的轉換。設向量圖型尺寸寬width像素,高height像素,程序流程如下:

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

②申請內存緩沖區。如果內存不足以容納整 個圖形,則可以分段處理。

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

③計算坐標點在所申請內存緩沖區的偏移量和屏蔽位。設原點(0,0)在內存中的偏移量為0,則圖中任意一點P(x,y)相對于原點(0,0)的偏移量為

offset=y*BytePerLine+x/8,該點對應的字節內屏蔽位為mask=0x80》》(X%8)。

④讀取點P(x,y)在內存中對應的顏色值Value,讀取所在的字節。

byte=(unsigned char)*(Bufferptr+offset),取該點對應的位,

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

3.3 主程序流程

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

4 結論

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5069

    文章

    19021

    瀏覽量

    303387
  • WINDOWS
    +關注

    關注

    3

    文章

    3524

    瀏覽量

    88439
收藏 人收藏

    評論

    相關推薦

    什么是嵌入式?一文讀懂嵌入式主板

    在現代科技浪潮中,嵌入式技術已成為支撐各種智能設備和系統運行的核心力量。那么,究竟什么是嵌入式?嵌入式系統,顧名思義,是將計算機的硬件和軟件嵌入到某種設備或系統中,以實現特定功能的計算
    的頭像 發表于 10-16 10:14 ?503次閱讀

    AMD 面向嵌入式系統推出高能效 EPYC 嵌入式 8004 系列

    AMD 憑借其 EPYC? 嵌入式處理器不斷樹立行業標準,為網絡、存儲和工業應用提供卓越的性能、效率、連接與創新。今天,我們正以第四代 AMD EPYC 嵌入式 8004 系列處理器擴展這一
    發表于 10-11 13:58 ?680次閱讀

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統的核心組件,是一種用于控制和數據處理的計算機硬件,其設計旨在嵌入特定設備中執行專門任務。嵌入式主板如同是設備的“大腦”,主要功能是根據需要管理和控制設備
    的頭像 發表于 09-30 10:05 ?370次閱讀

    嵌入式主板,你了解多少?

    嵌入式主板,也稱為嵌入式計算機主板,是一種專門設計用于嵌入式系統的計算機主板。與臺式機和筆記本電腦中使用的常規主板不同,嵌入式主板設計用于集成到更大的電子設備中,例如汽車、醫療設備或自
    的頭像 發表于 04-17 15:11 ?1415次閱讀

    嵌入式fpga是什么意思

    嵌入式FPGA是指將FPGA技術集成到嵌入式系統中的一種解決方案。嵌入式系統是一種為特定應用而設計的計算機系統,它通常包括處理器、內存、外設接口等組件,并且被嵌入到更大的設備或系統中,
    的頭像 發表于 03-15 14:29 ?1200次閱讀

    fpga是嵌入式

    FPGA(現場可編程門陣列)不是嵌入式系統,但FPGA在嵌入式系統中有著重要的應用。
    的頭像 發表于 03-14 17:19 ?2150次閱讀

    應用在機頂盒遙控器中的2.4GHz無線芯片

    機頂盒遙控器是用于控制機頂盒,進而控制電視機的遙控器。以機頂盒遙控器為例,其遙控器按鈕由前后兩部分組成,前一部分按鈕是用來代替電視機遙控器的,而后一部分按鈕則是用于控制機頂盒的按鈕。
    的頭像 發表于 02-29 09:48 ?808次閱讀
    <b class='flag-5'>應用在</b><b class='flag-5'>機頂盒</b>遙控器中的2.4GHz無線芯片

    求助機頂盒配置

    這臺機頂盒配置是什么配置?求助
    發表于 02-23 22:02

    iptv機頂盒怎么連接 iptv機頂盒和網絡機頂盒有什么區別

    IPTV機頂盒是一種用于接收和播放IPTV(Internet Protocol Television)服務的設備。它通過互聯網連接電視和電視節目提供商的服務器,使用戶能夠觀看各種廣播頻道、視頻點播
    的頭像 發表于 02-05 13:40 ?2260次閱讀

    機頂盒怎么選擇信號源 機頂盒反應特別慢怎么辦

    機頂盒是一種用于接收和解碼電視信號的設備,正常情況下,用戶可以通過遙控器或菜單來選擇信號源。然而,有時機頂盒的反應可能會變得緩慢,影響到我們的使用體驗。本文將詳細介紹如何選擇信號源以及如何解決機頂盒
    的頭像 發表于 01-31 11:44 ?3489次閱讀

    機頂盒怎么選 機頂盒是干什么用的

    機頂盒是一種通過無線電波或有線電視信號接收和解碼數字電視節目的裝置,它可以將電視信號轉換成數字信號,并將信號傳輸到電視上。機頂盒通常由硬件和軟件兩部分組成。 機頂盒的用途非常廣泛,介紹如下
    的頭像 發表于 01-25 10:53 ?2162次閱讀

    iptv機頂盒能從路由器接線嗎 iptv機頂盒怎么連接

    下面是連接IPTV機頂盒的幾種常見方法: 有線連接: a. 確保你的路由器具有可用的LAN端口。大多數家庭路由器都配備了多個LAN端口,其中一個是用來連接網絡設備的。 b. 使用以太網電纜將IPTV
    的頭像 發表于 01-19 16:02 ?6633次閱讀

    啥是嵌入式嵌入式都有啥?薪資如何?前景如何

    嵌入式系統(Embedded Systems)是一種特殊類型的計算機系統,被嵌入到其他設備或系統中,用于執行特定的任務或控制特定的功能。這些系統通常設計用于特定的應用領域,具有特定的硬件和軟件要求
    的頭像 發表于 01-17 16:39 ?858次閱讀
    啥是<b class='flag-5'>嵌入式</b>?<b class='flag-5'>嵌入式</b>都有啥?薪資如何?前景如何

    iptv機頂盒和網絡機頂盒有什么區別

    IPTV機頂盒和網絡機頂盒是兩種常見的電視盒子,用于將互聯網上的媒體內容傳輸到電視上。盡管它們有一些相似之處,但也存在一些重要的區別。本文將詳細介紹這兩種機頂盒的區別,并討論它們在功能、性能、內容
    的頭像 發表于 01-17 09:29 ?3277次閱讀

    什么是嵌入式系統?嵌入式系統的具體應用

    嵌入式,一般是指嵌入式系統。用于控制、監視或者輔助操作機器和設備的裝置。
    的頭像 發表于 12-20 13:33 ?2411次閱讀