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

    EEPW首頁 > 嵌入式系統 > 設計應用 > VxWorks5.5 平臺下矢量字體顯示的實現

    VxWorks5.5 平臺下矢量字體顯示的實現

    作者: 時間:2012-09-07 來源:網絡 收藏

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

      在編譯生成。o 字庫文件前, 先確定需要加載的TrueType 庫文件,例如需要將f:/font/目錄下的simsun.ttc,simkai.ttf 文件編譯生成一個。o 文件,先創建一個udft2cfg.s 文件,將需要編譯的字庫信息填入文件,再使用編譯命令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 文件。

      靜態加載方式在初始化時所用的字體結構信息與動態加載有一些區別,靜態加載所用字體信息已經明確,在初始化時需要將字體信息在結構中描述清楚,結構UGL_FT2_FONT_MEMBUF_DESC 描述字體名稱、起始地址,終止地址,并掛接到結構UGL_FT2_FONT_DRV_CFG 下,最后按照3.1 章節對字體進行初始化。

      3.5 字體的粗、斜體

      矢量字體方式包括正體、粗體、斜體、和粗斜體四種方式,FreeType 字體引擎已經了對各種方式的支持,但要在 上支持粗、斜體,需要修改udft2fnt.c 和uglfont2.c 的部分代碼。udft2fnt.c修改代碼如下:

      1) 在UGL_FT2_FONT 結構中增加兩個結構變量,UGL_SIZE weightsize; UGL_SIZE italicsize;

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

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

      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 函數中,增加矢量字體在斜體時的矩陣值;增加矢量字體在粗、斜體時字體位圖索引的獲取。因為矢量字體在粗、斜體時矩陣值和位圖索引號的獲取和正體有些差異,所以在處理時需和正體分開處理。

      5) 在ft2DrawStringSmallBitmaps 函數中,增加矢量字體在斜體時的矩陣值;因為矢量字體在粗、斜體時使用ft2GetGlyphIndex 函數不能正確獲取位圖索引,修改為FT_Get_Char_Index 來獲取位圖索引;增加在粗、斜體時的矢量字體位圖的處理。

      uglfont2.c 修改代碼如下:

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

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

      4 結論

      矢量字庫已應用于嵌入式瀏覽器、嵌入式閱讀器等多個軟件開發項目,實際工程應用表明,矢量字體的切換速度、速度都能滿足應用要求,并且字體大小的無級縮放、粗斜體顯示、以及旋轉顯示等效果能使人機界面更加友好,使用更加便捷。

      字符編碼根據長度分為單字節和雙字節兩種編碼方式,單字節編碼包括英文字母、數字和特殊字符等,雙字節編碼包括漢字和自定義字符等。

    矢量控制相關文章:矢量控制原理


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 吐鲁番市| 镇康县| 宣汉县| 湾仔区| 长乐市| 当雄县| 临安市| 海安县| 广州市| 阿瓦提县| 和顺县| 长宁县| 垫江县| 牡丹江市| 延津县| 曲松县| 加查县| 乐安县| 兰考县| 临夏县| 陆川县| 临泉县| 大埔区| 兴城市| 内乡县| 天柱县| 南通市| 甘肃省| 永康市| 龙口市| 贺兰县| 教育| 昂仁县| 平遥县| 江安县| 从化市| 淳化县| 麻城市| 西林县| 固始县| 安溪县|