VxWorks5.5 平台下矢量字体显示的实现

时间:2012-09-07来源:网络

  在编译生成。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 字体引擎已经实现了对各种显示方式的支持,但要在VxWorks5.5 上支持粗、斜体,需要修改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 结论

  矢量字库已应用于嵌入式浏览器、嵌入式阅读器等多个软件开发项目,实际工程应用表明,矢量字体的切换速度、显示速度都能满足应用要求,并且字体大小的无级缩放、粗斜体显示、以及旋转显示等效果能使人机界面更加友好,使用更加便捷。

  字符编码根据长度分为单字节和双字节两种编码方式,单字节编码包括英文字母、数字和特殊字符等,双字节编码包括汉字和自定义字符等。

1 2 3

关键词: 显示 实现 字体 矢量 平台 VxWorks5.5

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版