微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > VxWorks5.5 平台下矢量字体显示的实现

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

时间:09-07 来源:互联网 点击:

语句pFontDefinition->weight = (pFontDescriptor-> weight.min +pFontDescriptor->weight.max)/2;替换。

  4 结论

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

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

  WindML 字体显示分双字节显示和单字节显示两种方式,双字节显示是两个字节作为字体编码对字库进行查询,找到字符位图并显示;单字节显示是单个字节作为字体编码对字库进行查询,找到字符位图并显示。当英文字符显示时,可以使用单字节显示或双字节显示,当中文字符显示或中英文混合字符显示时必须使用双字节显示。

  VxWorks 下字体采用GB2312 编码,中文字符编码的每个字节都大于0x80,英文字符编码都小于0x80,在进行双字节显示时,需要将单字节字符转换成双字节字符。在字符转换时,先获取整个字符串长度,再判断每个字节是否大于0x80,如果小于0x80,则将单字节扩展成双字节;如果大于0x80,则将这个字节与后个字节组合成一个双字节;计算双字节数并返回,如上图2 所示。

图2 单字节字符转换成双字节字符。

  3.3 字体编码转换

  VxWorks5.5 下汉字采用GB2312 编码, 而FreeType 在处理汉字时只能识别UNICode 编码,在处理汉字前需要将GB2312 编码先转换成Unicode 编码,GB2312 与Unicode 的编码转换表采用二维数组保存数据,共有7000 多组对应项,如果采用遍历数组的方式来进行编码转换,那么平均每个汉字编码转换需要做3000 多次的编码比较,这非常影响汉字的处理速度。

  为了提高编码转换的处理速度,编码转换时采用折半查找方式来实现,使用折半查找需要先将GB2312编码从小到大排列,每个GB2312 编码对应一个Unicode 编码。在使用折半查找时,先取first=0 end=数组长度,然后(first+end)/2 得到一个中间编号,再通过中间编号获取相应的GB2312 编码和显示汉字编码比较大小,如果中间值大,则将first=0 end=中间编码组合再进行折半查找;如果中间值小,则将first=中间编码 end=数组长度 组合再进行折半查找;如果相等,则将GB2312 编码对应的Unicode 编码提交程序处理。

  使用折半查找一个汉字最多只需查找13 次,大大提高了汉字Unicode 编码的查找速度,加速了汉字显示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top