• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > VxWorks5.5 平臺(tái)下矢量字體顯示的實(shí)現(xiàn)

    VxWorks5.5 平臺(tái)下矢量字體顯示的實(shí)現(xiàn)

    作者: 時(shí)間:2012-09-07 來(lái)源:網(wǎng)絡(luò) 收藏

    本文引用地址:http://www.czjhyjcfj.com/article/148448.htm

    摘 要: 采用點(diǎn)陣字庫(kù),這種字庫(kù)設(shè)計(jì)簡(jiǎn)潔,應(yīng)用廣泛,但一個(gè)字庫(kù)只能對(duì)應(yīng)一種的一種大小,在不確定使用何種的情況下,這種傳統(tǒng)的字體方式便不能夠滿足需求。通過使用TrueType字庫(kù)和FreeType 字體引擎相結(jié)合的方式,能多種字體、任意大小的功能。主要介紹了TrueType、FreeType技術(shù)的基本原理,以及在 下如何將WindML、FreeType 和TrueType 三者相結(jié)合字體顯示的方法。

      1 點(diǎn)陣字庫(kù)的局限性

      VxWorks5.5 是美國(guó)風(fēng)河公司開發(fā)的嵌入式操作系統(tǒng),圖形系統(tǒng)采用WindML3.0,支持點(diǎn)陣字顯示,不支持字體顯示。點(diǎn)陣字采用內(nèi)存模式加載,使用前需要將字體庫(kù)先加載到內(nèi)存,再通過WindML 圖形接口實(shí)現(xiàn)點(diǎn)陣字顯示。點(diǎn)陣字庫(kù)采用。c 文件方式儲(chǔ)存信息,每個(gè)字信息都包含在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,其中包含了字體的所有點(diǎn)信息,字體顯示時(shí)只要根據(jù)字的寬高將點(diǎn)信息直接送入顯存顯示。這種方式的字體實(shí)現(xiàn)簡(jiǎn)單、顯示速度快,但是一個(gè)字體文件只包含一種字體、一個(gè)大小的信息,使用具有一定的局限性。

      隨著嵌入式軟件的不斷發(fā)展,在設(shè)計(jì)象嵌入式瀏覽器這樣的人機(jī)界面的軟件時(shí),發(fā)現(xiàn)點(diǎn)陣字庫(kù)已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足設(shè)計(jì)要求,嵌入式瀏覽器對(duì)字體的需求是根據(jù)網(wǎng)頁(yè)內(nèi)容來(lái)決定的,在網(wǎng)頁(yè)上任何類型,任何大小的字體都可能出現(xiàn),點(diǎn)陣字庫(kù)要將所有字體類型,每種字體的所有大小都包括是不可能的,這種局限性大大降低了瀏覽器的顯示效果。TrueType 字庫(kù)引入到VxWorks5.5 系統(tǒng)下,有效的解決了字體的問題,所有Windows 下的TrueType 字庫(kù)都可以在VxWorks5.5 系統(tǒng)直接使用,資源非常豐富,能滿足嵌入式系統(tǒng)對(duì)字庫(kù)的新需求。

      2 TrueType字庫(kù)原理及FreeType字體引擎

      TrueType 是Apple 公司和Microsoft 公司合作開發(fā)的頁(yè)面描述語(yǔ)言(簡(jiǎn)稱TTF),采用了直線和二次貝賽爾曲線來(lái)描述字符的輪廓,結(jié)合了光柵技術(shù)和技術(shù)的優(yōu)點(diǎn),克服了以往所有點(diǎn)陣字體、矢量字體和向量輪廓字體的缺點(diǎn),字體可以任意放大、縮小、旋轉(zhuǎn)和變形而不會(huì)影響輸出質(zhì)量,提供了真正的設(shè)備無(wú)關(guān)性,二次貝賽爾曲線既能保證輪廓曲線的光滑性,又有利于提高字形還原的速度。如下圖1 所示。

    圖1 TrueType 字體輪廓圖

    圖1 TrueType 字體輪廓圖

      FreeType 是一個(gè)完全免費(fèi)的、高品質(zhì)的可移植的字體引擎,它提供同一的接口訪問多種字體格式,包括TrueType,openType,CID,CFF 等。支持單色位圖,反走樣位圖的渲染,F(xiàn)reeType 庫(kù)是高度模塊化的程序庫(kù),它使用ANSI C 開發(fā),但采用面向?qū)ο蟮乃枷耄現(xiàn)reeType 用戶可以靈活地對(duì)它進(jìn)行裁剪。

      3 VxWorks5.5下矢量字庫(kù)的實(shí)現(xiàn)

      VxWorks5.5 下矢量字庫(kù)采用開放源代碼的Freetype 庫(kù)和Windows 下的TrueType 字庫(kù)結(jié)合實(shí)現(xiàn),通過WindML 圖形系統(tǒng)將矢量字應(yīng)用到VxWorks5.5系統(tǒng)中。矢量字使用前先初始化WindML 圖形系統(tǒng),再初始化矢量字庫(kù),并將矢量字庫(kù)的接口函數(shù)掛接到圖形系統(tǒng)下,在應(yīng)用矢量字庫(kù)時(shí)只需調(diào)用WindML 接口函數(shù),調(diào)用方式和點(diǎn)陣字庫(kù)一致,實(shí)現(xiàn)了與WindML的無(wú)縫掛接。TrueType 字庫(kù)根據(jù)加載方式不同分為動(dòng)態(tài)加載和靜態(tài)加載兩種方式,動(dòng)態(tài)加載方式是將TrueType 字庫(kù)拷貝到目標(biāo)機(jī)硬盤,根據(jù)應(yīng)用程序的設(shè)計(jì)要求在程序運(yùn)行時(shí)動(dòng)態(tài)加載字庫(kù);靜態(tài)加載方式是將TrueType 字庫(kù)在系統(tǒng)啟動(dòng)時(shí)便加載到目標(biāo)機(jī)內(nèi)存,應(yīng)用程序可以直接調(diào)用字庫(kù)信息。動(dòng)態(tài)加載方式優(yōu)點(diǎn)在于節(jié)省內(nèi)存和加載靈活,缺點(diǎn)在于不同字體切換時(shí)消耗的時(shí)間長(zhǎng),不適合需字體的頻繁切換的應(yīng)用程序;靜態(tài)加載方式優(yōu)點(diǎn)在于不同字體切換時(shí)消耗的時(shí)間短,適合需字體的頻繁切換的應(yīng)用程序,缺點(diǎn)在于內(nèi)存消耗大,加載不靈活。

      3.1 矢量字體的初始化

      矢量字庫(kù)的初始化主要有矢量字體設(shè)備創(chuàng)建和矢量字體設(shè)備注冊(cè)兩部分組成。先創(chuàng)建矢量字體設(shè)備,如果創(chuàng)建成功則將矢量字體設(shè)備注冊(cè)到系統(tǒng)中,如果創(chuàng)建不成功則退出程序。

      矢量字體設(shè)備創(chuàng)建函數(shù)UGL_FONT_DRIVER*uglFT2FontDriverCreate(UGL_UGI_DRIVER*pDriver,UGL_FT2_FONT_DRV_CFG *pFT2FontConfig),參數(shù)pDriver 為圖形系統(tǒng)設(shè)備號(hào),取值graphicsDevID 為WindML 初始化時(shí)創(chuàng)建的圖形系統(tǒng)設(shè)備號(hào);參數(shù)pFT2FontConfig 為字體配置結(jié)構(gòu),根據(jù)字體加載的方式不同參數(shù)也不同,具體見3.4 章節(jié);返回值ft_fontDevID為矢量字體設(shè)備號(hào)。

      設(shè)備注冊(cè)函數(shù)UGL_STATE uglRegistryAdd(UGL_UINT32 type, UGL_UINT32 data, UGL_UINT32id, char *name),參數(shù)type 為矢量字體設(shè)備類型,需定義一個(gè)新設(shè)備類型UGL_FONT_ENGINE_FTTYPE,取值為13;參數(shù)data 為圖形系統(tǒng)設(shè)備ID,取值(UGL_UINT32)graphicsDevID;參數(shù)id 為矢量字體設(shè)備號(hào),取值(UGL_UINT32) ft_fontDevID;參數(shù)name取值0.

    3.2 字體單雙字節(jié)編碼轉(zhuǎn)換

    3.4 字庫(kù)加載

      字體庫(kù)加載方式分動(dòng)態(tài)和靜態(tài)兩種,兩者之間互有優(yōu)缺點(diǎn),可根據(jù)用戶的不同需求自主選擇加載方式。

      3.4.1 字庫(kù)動(dòng)態(tài)加載

      字庫(kù)動(dòng)態(tài)加載方式是將windows 下的TrueType 字體庫(kù)文件(*.ttf,*.ttc)拷貝到目標(biāo)機(jī)目錄下,根據(jù)用戶需求在程序執(zhí)行過程中動(dòng)態(tài)加載字庫(kù)。動(dòng)態(tài)加載的實(shí)現(xiàn)方法:先聲明兩個(gè)結(jié)構(gòu)變量。

      1) UGL_FT2_FONT_DRV_CFG ft_font_cfg;

      2) UGL_FT2_FONT_PATH_DESC FontPathDesc;

      接著設(shè)置FontPathDesc 信息, FontPathDesc.PFontSearchPath=/ata0a/ttf/; FontPathDesc.filter=*.ttf;pFontSearchPath 為字體文件搜索路徑,filter 為文件過濾器。再設(shè)置ft_font_cfg 信息,ft_font_cfg.numFontPathDesc=1;ft_font_cfg.pFontPathDesc=FontPathDesc;

    ft_font_cfg.defaultCharset=FT_ENCODING_UNICODE;numFontPathDesc 為字體搜索路徑的個(gè)數(shù),pFontPathDesc 為搜索路徑,defaultCharset 為設(shè)置矢量字體的編碼模式。最后按照3.1 章節(jié)對(duì)矢量字庫(kù)進(jìn)行初始化。

      3.4.2 字庫(kù)靜態(tài)加載

      字體庫(kù)靜態(tài)加載方式是將windows 下的TrueType字體庫(kù)文件(*.ttf,*.ttc)編譯生成一個(gè)。o 文件,并在應(yīng)用程序執(zhí)行前先加載到內(nèi)存。靜態(tài)加載的實(shí)現(xiàn)方法:

    矢量控制相關(guān)文章:矢量控制原理

    上一頁(yè) 1 2 3 下一頁(yè)

    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 万荣县| 庄河市| 万州区| 富锦市| 交城县| 梧州市| 肇庆市| 铁岭县| 休宁县| 香格里拉县| 枝江市| 绵竹市| 抚顺县| 汤原县| 新竹县| 防城港市| 长沙市| 漳平市| 涿鹿县| 茂名市| 石景山区| 茂名市| 芦山县| 县级市| 兴安县| 青川县| 临安市| 南宫市| 海晏县| 兴宁市| 肥乡县| 安乡县| 库尔勒市| 靖远县| 郧西县| 樟树市| 那曲县| 巴塘县| 嘉黎县| 冕宁县| 道孚县|