一种TrueType字体渲染方法转让专利

申请号 : CN201610575213.6

文献号 : CN106294291B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 时洋洋李少光童歆

申请人 : 中国航空无线电电子研究所

摘要 :

本发明公开了一种TrueType字体渲染方法,包含以下步骤:一,完成字体数据库的创建;二,把各.ttf或.ttc文件导入到字体数据库;三,根据各字体家族下的各字体风格创建纹理字体对象,所述纹理字体对象包含字符索引数组、字体句柄和纹理页表;四,从字符索引数组中取出待渲染的字符的字符索引值,若字符索引值不为‑1,则执行步骤六,否则执行步骤五;五,由TrueType开源字体驱动取出该字符的字体模型,再由纹理字体对象进一步转换为字体纹理数据缓存在纹理页表上并更新字符信息的字符索引值;六,根据字符索引值从纹理页表取出字体纹理进行渲染后输出。本发明可大大提高渲染效率,且对硬件的要求低。

权利要求 :

1.一种TrueType字体渲染方法,包含以下步骤

步骤一,完成字体数据库的创建;

步骤二,把各.ttf文件或.ttc文件导入到字体数据库;

步骤三,根据各字体家族下的各字体风格创建纹理字体对象,所述纹理字体对象包含字符索引数组、字体句柄和纹理页表;

步骤四,从字符索引数组中取出待渲染的字符的字符索引值,若字符索引值不为-1,则直接执行步骤六,否则执行步骤五;

步骤五,由TrueType开源字体驱动取出该字符的字体模型,再由纹理字体对象进一步转换为字体纹理数据缓存在纹理页表上并更新该字符的字符索引值;

步骤六,根据字符索引值从纹理页表取出字体纹理进行渲染后输出。

2.根据权利要求1所述的一种TrueType字体渲染方法,其特征在于所述纹理字体对象还包含统计数组,所述统计数组用于统计每张纹理页的使用次数,当字体纹理数据往纹理页表缓存时,发现没有空闲纹理页的时候,则根据每张纹理页的使用次数清空掉使用次数最少的那个纹理页缓存的字体纹理供新建的字体纹理数据使用,并将与此纹理页相关的字符索引值更新。

3.根据权利要求1所述的一种TrueType字体渲染方法,其特征在于由字符索引值确认字体纹理在纹理页表上的位置的方法为:由字符索引值整除每页的纹理数为纹理页号,字符索引值对每页的纹理数取余为字符纹理所在纹理页的序号。

说明书 :

一种TrueType字体渲染方法

技术领域

[0001] 本发明涉及一种TrueType字体显示技术领域,尤其是涉及一种基于热排序缓存机制的TrueType字体渲染方法。

背景技术

[0002] 随着军民用飞机座舱显示系统的不断复杂、功能的不断增加、显示分辨率的不断增大,其显示的内容越来越丰富,种类越来越多,字符类更是不可或缺。比如地图中汉字的数量越来越多。此时,显示的性能和效率便是一个瓶颈。
[0003] 目前现有的座舱显示系统中,点阵字的使用居多。虽然其使用灵活、占用空间不大、显示速度快,但显示质量太差,放大缩小很容易失真。TrueType字体由于其显示美观,而且可任意缩放,从而得到广泛应用。但其渲染复杂,效率相对较低。

发明内容

[0004] 本发明的发明目的在于提供一种基于热排序缓存机制的TrueType字体渲染方法,可大大提高渲染效率。传统的PC环境、嵌入式系统下均可实现本发明,硬件包括:CPU、DDR、flash等存储设备、GPU。若达到相同的渲染性能,本发明对CPU、DDR、GPU等硬件的处理能力要求降低,从而降低整体成本。
[0005] 本发明的发明目的通过以下技术方案实现:
[0006] 一种TrueType字体渲染方法,包含以下步骤
[0007] 步骤一,完成字体数据库的创建;
[0008] 步骤二,把各.ttf文件或.ttc文件导入到字体数据库;
[0009] 步骤三,根据各字体家族下的各字体风格创建纹理字体对象,所述纹理字体对象包含字符索引数组、字体句柄和纹理页表;
[0010] 步骤四,从字符索引数组中取出待渲染的字符的字符索引值,若字符索引值不为-1,则执行步骤六,否则执行步骤五;
[0011] 步骤五,由TrueType开源字体驱动取出该字符的字体模型,再由纹理字体对象进一步转换为字体纹理数据缓存在纹理页表上并更新该字符的字符索引值;
[0012] 步骤六,根据字符索引值从纹理页表取出字体纹理进行渲染后输出。
[0013] 优选地,所述纹理字体对象还包含统计数组,所述统计数组用于统计每张纹理页的使用次数,当字体纹理数据往纹理页表缓存时,发现没有空闲纹理页的时候,则根据每张纹理页的使用次数清空掉使用次数最少的那个纹理页缓存的字体纹理供新建的字体纹理数据使用,并将与此纹理页相关的字符索引值更新。
[0014] 优选地,由字符索引值确认字体纹理在纹理页表上的位置的方法为:由字符索引值整除每页的纹理数为纹理页号,字符索引值对每页的纹理数取余为字符纹理所在纹理页的序号。
[0015] 本发明的有益效果在于:在同等条件下可以大大提高TrueType字体的渲染性能。一方面,相同性能下,可以降低对硬件的要求,从而降低整体成本;另一方面,可以很好地解决包含大量字符场景的性能瓶颈问题,从而提高整体性能,比如地图。综上,此发明具有显著的市场前景和经济效益。

附图说明

[0016] 图1纹理字体对象结构图
[0017] 图2基于热排序缓存机制的TrueType字体渲染流程

具体实施方式

[0018] 下面结合附图和实施例对本发明作进一步的详细说明。
[0019] 一种TrueType字体渲染方法,步骤如下:
[0020] 第一,完成字体数据库的创建。此步骤主要是利用FreeType开源字体引擎完成FreeType字体数据库对象的创建。
[0021] 第二,装载字体文件。此步骤把字体包(.ttf或.ttc)中包含的所有字体都导入到数据库。一个.ttf或.ttc文件,只是对应一个字体家族的字体集合,如:simhei.ttf字体文件中包括家族名为黑体的所有字体风格,其字体风格包含常规黑体、斜体黑体、粗体黑体、加粗倾斜黑体风格等字体。此步骤需要指定字体文件的名称和路径。
[0022] 第三,字体枚举。根据各字体家族下的各字体风格创建纹理字体对象,每一种字体风格会有其相应的纹理字体对象。纹理字体对象包含字符索引数组、字体句柄和纹理页表。
[0023] 第四,字符索引值判断。从字符索引数组中取出待渲染的字符的字符索引值,若字符索引值不为-1,则执行步骤六,否则执行步骤五。
[0024] 第五,创建字体纹理。此步骤由FreeType开源字体驱动把待渲染的字符转换为字体模型,然后由纹理字体对象进一步转换为字体纹理数据。由于转换字体模型到纹理数据耗时较大,因此纹理字体对象必须对字体模型进行热排序缓存设计以避免影响实时性。本发明在此引入了热排序缓存机制,即把生成的字体纹理缓存到纹理页,并把该字符纹理在纹理页的位置(第m张页表上第n个字符纹理)记录下来处理后赋给字符索引值。假设每一张纹理页表指定可存total个字符纹理,则上述字符的索引值就为(m-1)*total+n。若该字符已被绘制过,在根据其unicode码转为下标,可从字符索引数组直接取出索引值index,从而可取出其纹理数据,其在第index/total张纹理页表上的第(index)mod(total)个纹理。一旦超过纹理页表的缓存容量,则后续的新字符在找不到空闲的纹理页时不再创建新纹理页,而是通过淘汰使用次数最少的字符纹理页来进一步实现渲染。纹理字体对象结构如图1所示。为实现字符纹理页使用次数的统计,纹理字体对象还包含统计数组,所述统计数组用于统计每张纹理页的使用次数,当字体纹理数据往纹理页表缓存时,发现没有空闲纹理页的时候,则根据每张纹理页的使用次数清空掉使用次数最少的那个纹理页缓存的字体纹理供新建的字体纹理数据使用,并将与此纹理页相关的字符索引值更新。
[0025] 图1中,纹理字体对象主要包括一个字符索引数组和纹理页表以及一个TrueType字体句柄。字符索引数组一共包括65536个元素,与UTF-16字符编码一一对应,例如由字符“华”作为下标可直接取得对应的字符索引值,索引值整除每页的纹理数为纹理页号,索引值对每页的纹理数取余(即mod)为字符所在纹理页的序号。缺省情况下,如果一个字符从未被纹理字体对象绘制过,则该字符的索引值为-1。
[0026] 第六,渲染字符。根据字符索引值从纹理页表取出字体纹理进行渲染后输出。
[0027] 综上,基于热排序缓存机制的TrueType字体渲染流程如图2所示。
[0028] 可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。