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

背景技术:

随着军民用飞机座舱显示系统的不断复杂、功能的不断增加、显示分辨率的不断增大,其显示的内容越来越丰富,种类越来越多,字符类更是不可或缺。比如地图中汉字的数量越来越多。此时,显示的性能和效率便是一个瓶颈。

目前现有的座舱显示系统中,点阵字的使用居多。虽然其使用灵活、占用空间不大、显示速度快,但显示质量太差,放大缩小很容易失真。TrueType字体由于其显示美观,而且可任意缩放,从而得到广泛应用。但其渲染复杂,效率相对较低。

技术实现要素:

本发明的发明目的在于提供一种基于热排序缓存机制的TrueType字体渲染方法,可大大提高渲染效率。传统的PC环境、嵌入式系统下均可实现本发明,硬件包括:CPU、DDR、flash等存储设备、GPU。若达到相同的渲染性能,本发明对CPU、DDR、GPU等硬件的处理能力要求降低,从而降低整体成本。

本发明的发明目的通过以下技术方案实现:

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

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

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

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

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

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

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

优选地,所述纹理字体对象还包含统计数组,所述统计数组用于统计每张纹理页的使用次数,当字体纹理数据往纹理页表缓存时,发现没有空闲纹理页的时候,则根据每张纹理页的使用次数清空掉使用次数最少的那个纹理页缓存的字体纹理供新建的字体纹理数据使用,并将与此纹理页相关的字符索引值更新。

优选地,由字符索引值确认字体纹理在纹理页表上的位置的方法为:由字符索引值整除每页的纹理数为纹理页号,字符索引值对每页的纹理数取余为字符纹理所在纹理页的序号。

本发明的有益效果在于:在同等条件下可以大大提高TrueType字体的渲染性能。一方面,相同性能下,可以降低对硬件的要求,从而降低整体成本;另一方面,可以很好地解决包含大量字符场景的性能瓶颈问题,从而提高整体性能,比如地图。综上,此发明具有显著的市场前景和经济效益。

附图说明

图1纹理字体对象结构图

图2基于热排序缓存机制的TrueType字体渲染流程

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。

一种TrueType字体渲染方法,步骤如下:

第一,完成字体数据库的创建。此步骤主要是利用FreeType开源字体引擎完成FreeType字体数据库对象的创建。

第二,装载字体文件。此步骤把字体包(.ttf或.ttc)中包含的所有字体都导入到数据库。一个.ttf或.ttc文件,只是对应一个字体家族的字体集合,如:simhei.ttf字体文件中包括家族名为黑体的所有字体风格,其字体风格包含常规黑体、斜体黑体、粗体黑体、加粗倾斜黑体风格等字体。此步骤需要指定字体文件的名称和路径。

第三,字体枚举。根据各字体家族下的各字体风格创建纹理字体对象,每一种字体风格会有其相应的纹理字体对象。纹理字体对象包含字符索引数组、字体句柄和纹理页表。

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

第五,创建字体纹理。此步骤由FreeType开源字体驱动把待渲染的字符转换为字体模型,然后由纹理字体对象进一步转换为字体纹理数据。由于转换字体模型到纹理数据耗时较大,因此纹理字体对象必须对字体模型进行热排序缓存设计以避免影响实时性。本发明在此引入了热排序缓存机制,即把生成的字体纹理缓存到纹理页,并把该字符纹理在纹理页的位置(第m张页表上第n个字符纹理)记录下来处理后赋给字符索引值。假设每一张纹理页表指定可存total个字符纹理,则上述字符的索引值就为(m-1)*total+n。若该字符已被绘制过,在根据其unicode码转为下标,可从字符索引数组直接取出索引值index,从而可取出其纹理数据,其在第index/total张纹理页表上的第(index)mod(total)个纹理。一旦超过纹理页表的缓存容量,则后续的新字符在找不到空闲的纹理页时不再创建新纹理页,而是通过淘汰使用次数最少的字符纹理页来进一步实现渲染。纹理字体对象结构如图1所示。为实现字符纹理页使用次数的统计,纹理字体对象还包含统计数组,所述统计数组用于统计每张纹理页的使用次数,当字体纹理数据往纹理页表缓存时,发现没有空闲纹理页的时候,则根据每张纹理页的使用次数清空掉使用次数最少的那个纹理页缓存的字体纹理供新建的字体纹理数据使用,并将与此纹理页相关的字符索引值更新。

图1中,纹理字体对象主要包括一个字符索引数组和纹理页表以及一个TrueType字体句柄。字符索引数组一共包括65536个元素,与UTF-16字符编码一一对应,例如由字符“华”作为下标可直接取得对应的字符索引值,索引值整除每页的纹理数为纹理页号,索引值对每页的纹理数取余(即mod)为字符所在纹理页的序号。缺省情况下,如果一个字符从未被纹理字体对象绘制过,则该字符的索引值为-1。

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

综上,基于热排序缓存机制的TrueType字体渲染流程如图2所示。

可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。

truetype字体怎么转换成普通字体_一种TrueType字体渲染方法与流程相关推荐

  1. 怎么把swf文件转换成mp4?分享三种简便易学的方法

    怎么把swf文件转换成mp4?什么是SWF格式的文件?SWF是动画设计软件Flash的专用格式,也被称为Flash文件,该格式被广泛应用于网页设计.动画制作等领域.另外,这种格式的文件可以用浏览器打开 ...

  2. ue4导入倾斜摄影_一种高精度倾斜摄影建模方法与流程

    技术领域:本发明属于测绘技术领域,涉及矿山地形监测.测绘地形图.珍贵建筑物修复重建.林业.农业.采矿业.公用事业和能源.城市开发.国防和灾害应急的地理信息处理. 背景技术: :目前成熟的倾斜三维建模软 ...

  3. 图像迁移风格保存模型_一种图像风格迁移方法与流程

    本发明涉及图像处理技术领域,更为具体地,涉及一种图像风格迁移方法. 背景技术: 近年来,由深度学习所引领的人工智能技术浪潮,开始越来越广泛地应用到社会各个领域,尤其是在在计算机视觉领域,图像风格迁移作 ...

  4. 机器人杆长标定_一种SCARA机器人标定方法与流程

    本发明涉及机器人零位标定技术领域,尤其涉及一种SCARA机器人标定方法. 背景技术: 零位是机器人坐标系的基准,没有零位机器人无法判断自身位置.在影响机器人绝对精度的因素中,零位误差所占比重高达97% ...

  5. java将动态图转换成静态图_如何用最简单的方法把静态图变成动图?

    在今日头条浏览文章时,我们经常会看到有些作者在文章中插入了一些动态图片,不但美化了页面,而且起到了简明扼要的说明作用,让读者对文章内容加深了理解,也提高了文章的阅读量和点击量. 这样的动态效果是如何制 ...

  6. 干电池电量采集_一种电池电量采集方法与流程

    本发明涉及电池参数采集技术领域,尤其涉及一种电池电量采集方法. 背景技术: 目前,在使用电池的产品上,通常使用电量计来获取电池电量的精确数值.而由于电量计的成本较高,还有一些低成本的产品上,还会通过采 ...

  7. java游戏房间匹配_一种游戏房间匹配方法与流程

    本发明涉及计算机技术领域,尤其涉及一种游戏房间匹配方法. 背景技术: 在目前的网络游戏中,游戏对象与游戏对象会通过互联网在线上进行竞技比赛,很多时候都需要多名玩家共同参与,现有的游戏对象的配对方法大多 ...

  8. lds天线技术流程图_一种镭雕镀金方法与流程

    本发明涉及表面处理领域,尤其涉及一种镭雕镀金方法. 背景技术: 在电子通信产品的结构件中,一些产品经常采用在塑胶支架上镭雕化镀的方式来实现线路,LDS天线就是其中的一种.如图1所示,首先在塑料支架上镭 ...

  9. java熔断器_一种熔断器的实现方法与流程

    本发明涉及java开发技术领域,特别涉及一种熔断器的实现方法. 背景技术: 目前,在微服务架构中,为了方便系统的前期的开发以及后期升级.维护,提交工作效率,一般会将系统划分为多个服务单元.各个服务单元 ...

  10. ic 主动均衡_一种电池主动均衡方法与流程

    电池主动均衡技术领域,具体是一种电池均衡方法. 背景技术: 现有主动均衡技术主要通过检测电池电压差异或容量差异,并通过电子元器件(DC/DC或电容器)来实现单体与单体.单体与模组.模组与单体之间的能量 ...

最新文章

  1. BinaryTree-学习二叉树的Python库
  2. 【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | exec_utils.cc 中执行 Dex 编译为 Oat 文件的 Exec 和 ExecAndReturnC函数 )
  3. c++ 读文件_Linux文件(文件夹)详解
  4. 如何处理错误消息Please install the gcc make perl packages
  5. npm run dev 在本地调试出现跨域问题解决方法
  6. 前端系统化学习【JS篇】:(四-1)基本数据类型之Number篇
  7. TCP协议三次握手过程分析【图解,简单清晰】
  8. 一个SQL SERVER功能模块表
  9. 【写作技巧】毕业论文写作意义
  10. vue项目跨域问题完全解决
  11. 爬虫基础练习—python爬虫下载豆瓣妹子图片
  12. JavaPDF文件转图片
  13. 供应链金融系统建设的具体实施步骤
  14. 4种实现Web前端可视化的常用方法
  15. echart旭日图_echarts之用饼图制作带labelline的旭日图(一)
  16. sox处理mp3_SoX — 音频处理工具里的瑞士军刀
  17. 基于Linux 5.4.18的nvme驱动学习 - Linux相关概念 (一)
  18. HTML+CSS+JavaScript 实现图片3D展览
  19. 购买计算机一定要追求独立显卡,购买电脑的常识.pptx
  20. 码农三十岁之后过上了怎么的生活?

热门文章

  1. 《信息与编码》考试复习笔记6----第六章连续信源熵和信道容量(考点在连续信道容量)
  2. 职称计算机可以扣个税吗,哪些职业资格证书可以获得个税专项附加扣除和减免?...
  3. [Python笔记_1] Python基础知识要点
  4. 微服务架构下的可观测性
  5. 计算机如何寻找ppt文件,电脑上没保存的PPT怎么找回来
  6. 【python-docx 06】理解word样式
  7. 网页中怎样在线播放音乐和视频
  8. 用KUSTO查询语句(KQL)在Azure Data Explorer Database上查询LOG实战
  9. 金蝶中间件AAS无法访问管理平台提示404
  10. poj 1163经典DP