一种基于vxWorks系统的矢量字体显示优化方法与流程

文档序号:14950627发布日期:2018-07-17 22:28阅读:515来源:国知局

本发明涉及一种矢量字体显示优化方法,尤其涉及一种基于vxworks系统的矢量字体显示优化方法,属于设备终端画面显示的技术领域。



背景技术:

航空、航天、陆地武器装备和列车等设备的显示终端出于安全性考虑多以vxworks作为嵌入式实时操作系统,为满足中国市场的客观需求和便利性,显示内容多要求以中文界面为主,且为满足用户要求和客观需求,显示内容日趋繁杂化和多元化。

就目前而言,vxworks系统只支持西文,于广大用户而言,文件的传输和信息的交换受到很大局限。为满足客户使用需求,vxworks系统实现中文图形界面显示势在必行。点阵字库或纹理贴图方式实现字体显示的方法应运而生,这种字库方式设计简洁,应用广泛,但变化单一,显示内容需预先知晓。vxworks还支持windml图形系统,其包含freetype源码引擎库,能够有效地实现矢量字显示功能,但需要bsp支持windml图形系统,会增加各硬件平台代码移植和复用的负荷,提升了freetype库的裁剪的工作量和技术难度,而且显示效率相对低下,优化空间较窄,难以满足用户的实际使用需求。



技术实现要素:

本发明的目的是解决上述现有技术的不足,,提供一种基于vxworks系统的矢量字体显示优化方法。

为了达到上述目的,本发明所采用的技术方案为:

一种基于vxworks系统的矢量字体显示优化方法,其特征在于包括如下步骤:

步骤a,freetype引擎库裁剪,

选择支持truetype字库输出矢量字的组件,裁剪freetype技术引擎库,建立调用关系,更改源码中调用关系逻辑,剔除多余函数和冗余代码,根据硬件环境选择编译选项,编译成矢量字库;

步骤b,矢量字库初始化,

矢量字库的外观类创建;

步骤c,中文字符unicode转码设置,

转化程序中所有的中文为字符对应的内码,根据内码在汉字库中找相应字模的unicode码;

步骤d,freetype函数库字模获取,

中英文字符由内码转化为unicode码,获取truetype字库中对应字符的索引值,取得字符的字形轮廓,把其参数装入字形槽,把字形轮廓数据转换成位图形式;

步骤e,矢量字输出显示,

显示矢量字以转换后的位图为模板,采用纹理贴图的形式构建矢量字纹理显示;

步骤f,矢量字与背景混合显示,

采用alpha值混合,设定选择源因子为gl_one,目标因子为gl_one_minus_src_alpha;

步骤g,矢量字显示优化,

保留已被创建的字符字模、字形轮廓和纹理,通过内码直接查找判断字符是否已被创建过,已创建,则直接调用。

优选地,所述步骤a包括:

步骤201:freetype引擎库矢量字显示采用truetype库作为字库作为索引,选择支持truetype字库输出矢量字的组件;

步骤202:根据已选择的组件,剔除不需要的组件及其内容,对源码进行裁剪;

步骤203:根据选择的编译器,建立生成库文件工程时更改源码调用逻辑;

步骤204:根据硬件平台选择对应的cpu硬件环境设置,修改编译器设置选项;

步骤205:生成以供调用的矢量字库,用于矢量字显示。

优选地,所述步骤c包括:

步骤401:获取字符的内码;

步骤402:依据内码判断当前的字符是英文字符;

步骤403:依据内码判断当前字符为汉字字符;

步骤404:英文字符的ascii码,即是所需的unicode码;

步骤405:根据中文汉字库特性以及字符的内码,计算中文字符的区位码;

步骤406:依据区位码查找字库中对应中文字符的unicode码。

本发明的有益效果主要体现在:

以空间换时间的优化方法,解决矢量字显示时间的消耗,保留已被创建的字符字模、字形轮廓和纹理,通过内码直接查找判断字符是否已被创建过,增加显示效率。可以在vxworks系统中广泛使用,只要采用vxworks系统与opengl/es库的图形显示领域,均可适用,可以对已经定型的硬件进行软件升级,改变其矢量字显示的方式,能实现多种字体、任意大小矢量字的显示功能,能够与背景完美相融,并优化矢量字正常显示流程,保证了显示效率也满足正常显示需求。

附图说明

图1是本发明中freetype引擎库裁剪的流程图。

图2是本发明中矢量字输出显示的流程图。

图3是本发明中中文字符unicode转码设置的流程图。

图4是本发明中矢量字显示优化的流程图。

具体实施方式

本发明提供一种基于vxworks系统的矢量字体显示优化方法。以下结合附图对本发明技术方案进行详细描述,以使其更易于理解和掌握。

一种基于vxworks系统下的矢量字体显示及优化方法,包含以下步骤:

步骤a.,freetype引擎库裁剪

如果freetype技术引擎库能够有效地输出显示truetype字库,需支持tt_driver_class、ft_smooth_renderer_class和sfnt_module_class三组组件,裁剪freetype技术引擎库,删除多余组件内容。

根据workbench或tornador建立工程的调用关系,更改源码中调用关系逻辑,剔除多余函数和冗余代码,实现源码有效地裁剪,根据硬件环境选择编译选项,编译成目标文件,供调用。

步骤b,矢量字库初始化

矢量字库的初始化主要是外观类的创建。一个外观对象对应单个字体外观,即一个特定风格的特定外观类型,例如arial和arialitalic是两个不同的外观。

每个外观对象都有一个或多个尺寸对象,一个尺寸对象用来存放指定字符宽度和高度的特定数据,每个新创建的外观对象有一个尺寸对象的内容。

步骤c,中文字符unicode转码设置

国家标准的汉字字符集在汉字操作系统中是以汉字库的形式提供的,并对汉字库结构作了统一规定,将字库分成94个区,每个区有94个汉字,每个汉字就有唯一的识别码,称为区位码。通过汉字的区位码可以计算出该汉字在字库中的位置,从而找到该汉字的字模。

vxworks本身不支持中文,也不包含中文字库,要实现汉字显示必须首先将字库文件下载到目标机上。程序中所有的中文都转化为该字符对应的内码,程序执行中需要处理汉字时就根据其内码到字库中找相应的字模,而freetype函数库字模是以unicode码进行排序的,所以根据汉字内码转化为unicode码。具体实现过程是解析与裁剪icon库源码实现此功能。

步骤d,freetype函数库字模获取

freetype函数库获取字模,必须引入字形槽的概念,其提供一个地方可以很容易地容纳字形映象,且不管格式。truetype中字形槽目的是显式地提供数据来计算一个槽的最大尺寸,且用来为指定字形保存格式特定的hint,以及装入字形的必要数据,控制矢量字显示的位置。每个外观对象有一个单一字形槽,可以直接访问。

中英文字符由内码转化为unicode码,旨在获取truetype字库中对应字符的索引值,通过truetype字库中的字符索引值装载、获取等步骤取得字符的字形轮廓,把其必要参数装入字形槽,把字形轮廓数据转换成位图形式,依据字形槽数据和显示位置输出矢量字。

步骤e,矢量字输出显示

字形槽与位图已被成功获取,矢量字输出显示需要opengl图形显示驱动的支持。显示矢量字以转换后的位图为模板,采用纹理贴图的形式构建矢量字纹理显示。输出显示前把位图数据存储至对应的字符纹理数据中,每个字符位图都需构建一个独立的纹理矩阵,构建完纹理矩阵后,根据字形槽的必要参数以及矢量字需显示的位置计算显示的精确位置,而后贴纹理即可。

特别提醒,字符是以字形轮廓形式存储,但是同样字号字符的字形轮廓位图各数据均有可能不同,需参照字形轮廓数据、纹理的实际大小以及字号宽高数据和需显示位置,计算纹理贴图位置,否则矢量字显示的位置会出现些许偏颇。

步骤f,矢量字与背景混合显示

矢量字输出显示后与预想的矢量字显示效果不同。矢量字显示效果不满足显示需求,存在黑色背景问题,与实际显示背景不相融,矢量字显示与显示背景无法有效叠加。如果采用alpha值滤波形式消除黑色背景,能够保证矢量字与显示背景相叠加,但是矢量字周围会存在少许黑色边框,无法彻底滤除,未达到预想的显示效果。

混合是把源颜色和目标颜色进行混合,能够有效地消除锯齿、字体背景以及字体显示的黑色边框,使输出效果像半透明。如果启动混合,alpha值常常用于把被处理片断的颜色值与已经存储在帧缓冲区中的像素颜色值进行混合。进行alpha值混合操作,设定选择源因子为gl_one,目标因子为gl_one_minus_src_alpha,其他源因子和目标因子的混合方式,达不到预期矢量字显示的要求。其中alpha值选择由位图值决定,且使用混合操作之前需启动混合功能,才能使混合生效,有效地去除黑色边框与背景相融。

步骤g,矢量字显示优化

vxworks显示画面是任务形式,即类似一个死循环形式,画面显示过程不断被调用,造成相同的字符重复的在truetype字库中被索引,字模和字形轮廓不断被重复获取,字符位图纹理不断被重新复制和重新创建,严重影响矢量字显示的效率。

本发明过程包含几个方面分别是freetype引擎库裁剪、矢量字显示以及显示过程优化。

如图1所示,使用本发明freetype引擎库裁剪方法有如下步骤:

步骤201:本发明中freetype引擎库矢量字显示采用truetype库作为字库作为索引,选择支持truetype字库输出矢量字的组件;

步骤202:根据已选择的组件,剔除不需要的组件及其内容,对源码进行裁剪;

步骤203:根据选择的编译器,建立生成库文件工程时更改源码调用逻辑;

步骤204:硬件平台的不同,选择对应的cpu等硬件环境设置,修改编译器设置选项;

步骤205:生成以供调用的库文件,用于矢量字显示。

上述生成的库文件作为应用程序的引用文件,选择对应的truetype字库(微软系统下),如图2和图3,使用本发明矢量字显示有如下步骤:

步骤301:系统上电,启动软件,程序开始执行;

步骤302:初始化freetype库,判断上述生成的库文件是否已选择组件;

步骤303:读取truetype字库,依据程序中所有可能使用的字号或类型的数目,创建对应数目的外观对象;

步骤304:为所有的外观对象设置对应的大小(可依据微软中字号设置);

步骤305:获取需显示的字符的unicode码,如图3所示,执行步骤401;

步骤401:获取字符的内码(英文的ascii码);

步骤402:依据内码判断当前的字符是否为英文,如果是,执行步骤404,如果不是,执行步骤403;

步骤404:英文字符的ascii码,即是所需的unicode码;

步骤403:依据内码判断是否是中文字符,如果是,执行405,如果不是,终止操作;

步骤405:根据中文汉字库特性以及字符的内码,计算中文字符的区位码;

步骤406:依据区位码查找字库中对应中文字符的unicode码,转步骤306;

步骤306:依据字符的unicode码获取外观对象对应的字形索引;

步骤307:依据字形索引和外观对象,获取对应字符的字形槽和字模;

步骤308:是否直接开始绘制字符,如果是,执行310,如果不是执行309;

步骤309:依据字形槽数据和字模数据,把对应的字符配置成rgba数据格式(bmp格式),依据字形槽、字模数据或bmp格式数据制作成纹理;

步骤310:通过纹理贴图方式,实现字符显示,采用混合模式,实现字符与显示背景融合,去除字符黑色边框;

步骤311:判断是否还有字符要显示,如果没有,执行步骤312,如果有,执行步骤305;

步骤312:销毁字体和freetype库,释放资源。

上述描述了中英字符在vxworks系统下显示过程,但是经实验验证,当显示画面相对较复杂,包含显示的文字较多时,上述过程矢量字显示会严重影响画面显示的效率,甚至会致使画面出现迟钝现象。修改字符显示过程,如图4所示,使用本发明矢量字显示优化方法有如下步骤:

步骤501:获取字符的内码,同步骤401;

步骤502:通过字符的内码在已创建的字符中查找,判断当前需显示字符是否已被创建,如果是,执行步骤503,如果不是,执行步骤504;

步骤504:从缓冲空间取出存储的字形轮廓数据和纹理;

步骤503、505:同步骤305~步骤309内容,实现字体字形轮廓数据获取以及纹理创建过程;

步骤506:在缓冲空间存储当前字符的内码、字形轮廓数据和纹理数据等;

步骤507:同步骤310,通过纹理方式显示字符,采用混合去除黑色边框。

通过以上描述可以发现,本发明一种基于vxworks系统的矢量字体显示优化方法,以空间换时间的优化方法,解决矢量字显示时间的消耗,保留已被创建的字符字模、字形轮廓和纹理,通过内码直接查找判断字符是否已被创建过,增加显示效率。可以在vxworks系统中广泛使用,只要采用vxworks系统与opengl/es库的图形显示领域,均可适用,可以对已经定型的硬件进行软件升级,改变其矢量字显示的方式,能实现多种字体、任意大小矢量字的显示功能,能够与背景完美相融,并优化矢量字正常显示流程,保证了显示效率也满足正常显示需求。

以上对本发明的技术方案进行了充分描述,需要说明的是,本发明的具体实施方式并不受上述描述的限制,本领域的普通技术人员依据本发明的精神实质在结构、方法或功能等方面采用等同变换或者等效变换而形成的所有技术方案,均落在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1