CN106294291B - 一种TrueType字体渲染方法 - Google Patents
一种TrueType字体渲染方法 Download PDFInfo
- Publication number
- CN106294291B CN106294291B CN201610575213.6A CN201610575213A CN106294291B CN 106294291 B CN106294291 B CN 106294291B CN 201610575213 A CN201610575213 A CN 201610575213A CN 106294291 B CN106294291 B CN 106294291B
- Authority
- CN
- China
- Prior art keywords
- font
- texture
- character
- page
- index value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/103—Formatting, i.e. changing of presentation of documents
- G06F40/109—Font handling; Temporal or kinetic typography
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Document Processing Apparatus (AREA)
- Image Generation (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
本发明公开了一种TrueType字体渲染方法,包含以下步骤:一,完成字体数据库的创建;二,把各.ttf或.ttc文件导入到字体数据库;三,根据各字体家族下的各字体风格创建纹理字体对象,所述纹理字体对象包含字符索引数组、字体句柄和纹理页表;四,从字符索引数组中取出待渲染的字符的字符索引值,若字符索引值不为‑1,则执行步骤六,否则执行步骤五;五,由TrueType开源字体驱动取出该字符的字体模型,再由纹理字体对象进一步转换为字体纹理数据缓存在纹理页表上并更新字符信息的字符索引值;六,根据字符索引值从纹理页表取出字体纹理进行渲染后输出。本发明可大大提高渲染效率,且对硬件的要求低。
Description
技术领域
本发明涉及一种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所示。
可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。
Claims (3)
1.一种TrueType字体渲染方法,包含以下步骤
步骤一,完成字体数据库的创建;
步骤二,把各.ttf文件或.ttc文件导入到字体数据库;
步骤三,根据各字体家族下的各字体风格创建纹理字体对象,所述纹理字体对象包含字符索引数组、字体句柄和纹理页表;
步骤四,从字符索引数组中取出待渲染的字符的字符索引值,若字符索引值不为-1,则直接执行步骤六,否则执行步骤五;
步骤五,由TrueType开源字体驱动取出该字符的字体模型,再由纹理字体对象进一步转换为字体纹理数据缓存在纹理页表上并更新该字符的字符索引值;
步骤六,根据字符索引值从纹理页表取出字体纹理进行渲染后输出。
2.根据权利要求1所述的一种TrueType字体渲染方法,其特征在于所述纹理字体对象还包含统计数组,所述统计数组用于统计每张纹理页的使用次数,当字体纹理数据往纹理页表缓存时,发现没有空闲纹理页的时候,则根据每张纹理页的使用次数清空掉使用次数最少的那个纹理页缓存的字体纹理供新建的字体纹理数据使用,并将与此纹理页相关的字符索引值更新。
3.根据权利要求1所述的一种TrueType字体渲染方法,其特征在于由字符索引值确认字体纹理在纹理页表上的位置的方法为:由字符索引值整除每页的纹理数为纹理页号,字符索引值对每页的纹理数取余为字符纹理所在纹理页的序号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610575213.6A CN106294291B (zh) | 2016-07-20 | 2016-07-20 | 一种TrueType字体渲染方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610575213.6A CN106294291B (zh) | 2016-07-20 | 2016-07-20 | 一种TrueType字体渲染方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106294291A CN106294291A (zh) | 2017-01-04 |
CN106294291B true CN106294291B (zh) | 2019-01-15 |
Family
ID=57651692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610575213.6A Active CN106294291B (zh) | 2016-07-20 | 2016-07-20 | 一种TrueType字体渲染方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106294291B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111221597A (zh) * | 2018-11-23 | 2020-06-02 | 北京方正手迹数字技术有限公司 | 字体渲染方法、装置及计算机可读存储介质 |
CN110147330B (zh) * | 2019-05-23 | 2023-09-01 | 深圳市创维软件有限公司 | 一种字模数据的缓存方法、装置、设备和存储介质 |
CN114885202A (zh) * | 2019-08-28 | 2022-08-09 | 腾讯数码(天津)有限公司 | 字符串显示处理方法、装置、终端及存储介质 |
CN112069770B (zh) * | 2020-09-17 | 2024-04-12 | 中国航空无线电电子研究所 | 一种基于Vaps XT的改进型字体生成方法 |
CN114596389B (zh) * | 2022-05-10 | 2022-07-08 | 中国人民解放军海军工程大学 | 基于OpenGL实例化技术的大批量文字标牌绘制方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101483035A (zh) * | 2009-01-12 | 2009-07-15 | 腾讯科技(深圳)有限公司 | 在图形界面上显示文字的方法和*** |
CN102467490A (zh) * | 2010-11-01 | 2012-05-23 | 北大方正集团有限公司 | 一种字体数据的处理方法及装置 |
CN102541828A (zh) * | 2012-01-11 | 2012-07-04 | 深圳市同洲视讯传媒有限公司 | 一种字体实例创建方法及嵌入式***设备 |
CN103186919A (zh) * | 2011-12-28 | 2013-07-03 | 腾讯科技(深圳)有限公司 | 一种文字渲染方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060170684A1 (en) * | 2005-01-28 | 2006-08-03 | Microsoft Corporation | Font cache and meta-fonts |
US8269987B2 (en) * | 2007-10-30 | 2012-09-18 | Xerox Corporation | Using application side truetype or other outline fonts to create specialty imaging fonts on digital front-end |
-
2016
- 2016-07-20 CN CN201610575213.6A patent/CN106294291B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101483035A (zh) * | 2009-01-12 | 2009-07-15 | 腾讯科技(深圳)有限公司 | 在图形界面上显示文字的方法和*** |
CN102467490A (zh) * | 2010-11-01 | 2012-05-23 | 北大方正集团有限公司 | 一种字体数据的处理方法及装置 |
CN103186919A (zh) * | 2011-12-28 | 2013-07-03 | 腾讯科技(深圳)有限公司 | 一种文字渲染方法及装置 |
CN102541828A (zh) * | 2012-01-11 | 2012-07-04 | 深圳市同洲视讯传媒有限公司 | 一种字体实例创建方法及嵌入式***设备 |
Non-Patent Citations (2)
Title |
---|
基于OGRE的汉字渲染方案;彭四伟等;《计算机***应用》;20101231;第19卷(第10期);全文 |
嵌入式***中的TrueType 字体驱动;陈文文等;《计算机工程》;20100430;第36卷(第7期);全文 |
Also Published As
Publication number | Publication date |
---|---|
CN106294291A (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106294291B (zh) | 一种TrueType字体渲染方法 | |
US20130021361A1 (en) | Method and device for rendering user interface font | |
CN100498927C (zh) | 二维图形引擎中的点阵字符的缩进方法与中文处理方法 | |
CN104025181B (zh) | 用于去耦合采样的基于分类的块延迟着色体系结构 | |
CN103425725A (zh) | 散列冲突降低*** | |
CN105117415A (zh) | 一种优化的ssd数据更新方法 | |
US20150348278A1 (en) | Dynamic font engine | |
CN108416000A (zh) | 数据展示方法、装置、设备及存储介质 | |
CN106528026B (zh) | 文本显示方法及装置 | |
CN107135427A (zh) | 一种显示弹幕信息的方法和*** | |
Sproull et al. | A network graphics protocol | |
CN103488441B (zh) | 一种***语在pos机上打印的实现方法 | |
CN101236564A (zh) | 一种海量数据高性能读取显示方法 | |
CN103778069A (zh) | 高速缓冲存储器的高速缓存块长度调整方法及装置 | |
CN105550979A (zh) | 一种高数据通量纹理Cache层次结构 | |
CN100520739C (zh) | 一种快速虚实地址转换装置及其方法 | |
JPH01210990A (ja) | 表示装置 | |
CN101593171B (zh) | 一种可通过内存映射方式访问的字体文件及其访问方法 | |
CN111330270B (zh) | 一种用户界面渲染的方法 | |
CN108543307B (zh) | 使用Physx物理引擎模拟流程的整合优化方法及装置 | |
CN112540936A (zh) | 面向异构众核架构的离散访存读写方法 | |
CN105224565A (zh) | 文字缓存方法及装置 | |
CN101667158B (zh) | 串流上下文的高速缓存*** | |
CN105045752B (zh) | 一种基于宽口sram存储的高速ad数据pxi总线传输解析方法 | |
CN104239224B (zh) | 一种基于渲染应用数据访问特点的数据管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |