<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/148448.htm

            在編譯生成。o 字庫(kù)文件前, 先確定需要加載的TrueType 庫(kù)文件,例如需要將f:/font/目錄下的simsun.ttc,simkai.ttf 文件編譯生成一個(gè)。o 文件,先創(chuàng)建一個(gè)udft2cfg.s 文件,將需要編譯的字庫(kù)信息填入文件,再使用編譯命令ccpenTIum -mtune=pentium –march=pentium -O2 -nostdlib -fno-builtin -fno-defer -pop-DCPU=PENTIUM -DTOOL_FAMILY=gnu -D_WRS_KERNEL-DVXWORKS -xassembler-with-cpp -g -c udft2cfg.o udft2cfg.s 編譯文件,生成udft2cfg.o 文件。

            靜態(tài)加載方式在初始化時(shí)所用的字體結(jié)構(gòu)信息與動(dòng)態(tài)加載有一些區(qū)別,靜態(tài)加載所用字體信息已經(jīng)明確,在初始化時(shí)需要將字體信息在結(jié)構(gòu)中描述清楚,結(jié)構(gòu)UGL_FT2_FONT_MEMBUF_DESC 描述字體名稱、起始地址,終止地址,并掛接到結(jié)構(gòu)UGL_FT2_FONT_DRV_CFG 下,最后按照3.1 章節(jié)對(duì)字體進(jìn)行初始化。

            3.5 字體的粗、斜體

            矢量字體方式包括正體、粗體、斜體、和粗斜體四種方式,F(xiàn)reeType 字體引擎已經(jīng)了對(duì)各種方式的支持,但要在 上支持粗、斜體,需要修改udft2fnt.c 和uglfont2.c 的部分代碼。udft2fnt.c修改代碼如下:

            1) 在UGL_FT2_FONT 結(jié)構(gòu)中增加兩個(gè)結(jié)構(gòu)變量,UGL_SIZE weightsize; UGL_SIZE italicsize;

            2) 在uglFT2FontCreate 函數(shù)中,去除三個(gè)條件pFontDef->weight >=pFT2FontDesc->header.weight.min pFontDef->weight = pFT2FontDesc-> header.weight.max pFontDef->italic == pFT2FontDesc->header. Italic;增加字體結(jié)構(gòu)變量weightsize,italicsize的賦值,pFT2Font->weightsize = pFontDef->weight;pFT2Font->italicsize=pFontDef->italic;

            3) 在uglFT2FontInfo 函數(shù)中,增加粗體、斜體信息的設(shè)置和獲取代碼,

            case UGL_FONT_WEIGHT_SET: pFT2Font->weightsize = *((UGL_SIZE *)pInfo);break;

            case UGL_FONT_WEIGHT_GET: (*(UGL_SIZE*)pInfo) = pFT2Font->weightsize;

            status = UGL_STATUS_OK;break;

            case UGL_FONT_SLANT_ANGLE_SET: pFT2

            Font->italicsize = *((UGL_SIZE *)pInfo);break;

            case UGL_FONT_ SLANT_ANGLE _GET:(*(UGL_SIZE *)pInfo) = pFT2Font->italicsize;

            status = UGL_STATUS_OK;break;

            4) 在ft2DrawStringImageCache 函數(shù)中,增加矢量字體在斜體時(shí)的矩陣值;增加矢量字體在粗、斜體時(shí)字體位圖索引的獲取。因?yàn)槭噶孔煮w在粗、斜體時(shí)矩陣值和位圖索引號(hào)的獲取和正體有些差異,所以在處理時(shí)需和正體分開處理。

            5) 在ft2DrawStringSmallBitmaps 函數(shù)中,增加矢量字體在斜體時(shí)的矩陣值;因?yàn)槭噶孔煮w在粗、斜體時(shí)使用ft2GetGlyphIndex 函數(shù)不能正確獲取位圖索引,修改為FT_Get_Char_Index 來獲取位圖索引;增加在粗、斜體時(shí)的矢量字體位圖的處理。

            uglfont2.c 修改代碼如下:

            修改uglConstructFontDef 函數(shù),增加斜體信息賦值,pFontDefinition->italic = pFontDescriptor-> italic.

            去除語(yǔ)句pFontDefinition->weight = (pListArray[matchIndex].fontDesc.weight.min + pListArray[matchIndex].fontDesc.weight.max)/2;,使用語(yǔ)句pFontDefinition->weight = (pFontDescriptor-> weight.min +pFontDescriptor->weight.max)/2;替換。

            4 結(jié)論

            矢量字庫(kù)已應(yīng)用于嵌入式瀏覽器、嵌入式閱讀器等多個(gè)軟件開發(fā)項(xiàng)目,實(shí)際工程應(yīng)用表明,矢量字體的切換速度、速度都能滿足應(yīng)用要求,并且字體大小的無級(jí)縮放、粗斜體顯示、以及旋轉(zhuǎn)顯示等效果能使人機(jī)界面更加友好,使用更加便捷。

            字符編碼根據(jù)長(zhǎng)度分為單字節(jié)和雙字節(jié)兩種編碼方式,單字節(jié)編碼包括英文字母、數(shù)字和特殊字符等,雙字節(jié)編碼包括漢字和自定義字符等。

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


          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();