一种用户界面字体渲染方法及装置转让专利

申请号 : CN201010152009.6

文献号 : CN101833542B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 廖海亮

申请人 : 中兴通讯股份有限公司

摘要 :

本发明公开了一种用户界面字体渲染方法,包括如下步骤:字体缓存表建立步骤,用于建立字体缓存表,对需要渲染的字体进行缓存;字体查找步骤,用于在所述字体缓存表中查找并返回需要渲染的字体;字体渲染步骤,用于将所述查找到的需要渲染的字体渲染出来;字体缓存步骤,用于将未在所述字体缓存表中查找到的字体缓存到所述字体缓存表中。本发明方法能够显著提高用户界面字体渲染效率,特别使得包含大量字体渲染的动态界面的流畅程度不会因为大量字体渲染而降低。本发明还提供了一种相应的用户界面字体渲染装置,包括字体缓存模块、字体查找模块、字体渲染模块和字体缓存表维护模块。

权利要求 :

1.一种用户界面字体渲染方法,其特征在于包括如下步骤:字体缓存表建立步骤,用于建立字体缓存表,对需要渲染的字体进行缓存;

字体查找步骤,用于在所述字体缓存表中查找并返回需要渲染的字体;其中,查找字体缓存表,若找到缓存字体,则把找到字体所需的查找次数保存在变量temp_step中,并且把access_num的值加1;access_num代表查找次数;按照下列方法计算平均查找次数avg_step:avg_step=(avg_step*(access_num-1)+temp_step)/access_num;

如果avg_step大于阀值s,则清空字体缓存表,同时access_num和avg_step重置为零;

字体渲染步骤,用于将所述查找到的需要渲染的字体渲染出来。

2.根据权利要求1所述的用户界面字体渲染方法,其特征在于:所述字体缓存表为哈希链表,其每一个节点包括文字信息和缓存位图;

其中所述文字信息用于判断所述需要渲染的字体和缓存在所述字体缓存表中的字体是否一致;

所述缓存位图用于渲染所述字体。

3.根据权利要求1或2所述的用户界面字体渲染方法,其特征在于:还包括字体缓存步骤,用于将未在所述字体缓存表中查找到的字体缓存到所述字体缓存表中。

4.根据权利要求3所述的用户界面字体渲染方法,其特征在于,所述字体缓存步骤包括:生成一个与需要缓存的字体相关联的内存;

设置所述内存的属性,包括设置背景色为黑色,设置字体颜色以及字体格式;

调用手机平台字体绘制接口将所述字体绘制到所述内存上。

5.根据权利要求3所述的用户界面字体渲染方法,其特征在于:若所述字体查找步骤查找所述需要渲染的字体失败,则执行所述字体缓存步骤,将所述需要渲染的字体缓存到所述字体缓存表中,同时返回所述需要渲染的字体,供所述字体渲染步骤执行。

6.一种用户界面字体渲染装置,其特征在于包括字体缓存模块、字体查找模块和字体渲染模块;

其中,所述字体缓存模块存放有字体缓存表,用于缓存需要渲染的字体;

所述字体查找模块用于在所述字体缓存表中查找并返回需要渲染的字体;其中,查找字体缓存表,若找到缓存字体,则把找到字体所需的查找次数保存在变量temp_step中,并且把access_num的值加1;access_num代表查找次数;按照下列方法计算平均查找次数avg_step:avg_step=(avg_step*(access_num-1)+temp_step)/access_num;

如果avg_step大于阀值s,则清空字体缓存表,同时access_num和avg_step重置为零;

所述字体渲染模块用于将所述需要渲染的字体渲染出来。

7.根据权利要求6所述的用户界面字体渲染装置,其特征在于:所述字体缓存表为哈希链表,其每一个节点包括文字信息和缓存位图;

其中所述文字信息用于判断所述需要渲染的字体和缓存在所述字体缓存表中的字体是否一致;

所述缓存位图用于渲染所述字体。

8.根据权利要求6或7所述的用户界面字体渲染装置,其特征在于:所述字体缓存模块,还用于将未在所述字体缓存表中查找到的字体缓存到所述字体缓存表中。

9.根据权利要求8所述的用户界面字体渲染装置,其特征在于,所述字体缓存模块采用的字体缓存方案包括:生成一个与需要缓存的字体相关联的内存;

设置所述内存的属性,包括设置背景色为黑色,设置字体颜色以及字体格式;

调用手机平台字体绘制接口把所述字体绘制到所述内存上。

10.根据权利要求6或7所述的用户界面字体渲染装置,其特征在于:还包括字体缓存表维护模块,用于对所述字体缓存表进行维护。

说明书 :

一种用户界面字体渲染方法及装置

技术领域

[0001] 本发明属于手机用户界面(UI)技术领域,尤其涉及一种用户界面字体渲染方法及装置。

背景技术

[0002] 手机用户界面又称作人机界面(MMI),它负责和用户的交互,在必要的时候调用其它模块的功能。UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅让手机变得有个性有品味,还让手机的操作变得舒适、简单、自由,充分体现手机的定位和特点。
[0003] 手机UI开发的核心是手机图形界面渲染引擎。手机图形界面渲染引擎不同于一般的二维或三维图形渲染引擎,不仅要求能够渲染出更精美的图形界面,还要求渲染的效率能够更高,对系统资源的占用尽量低。
[0004] 手机字体渲染引擎是手机图形界面渲染引擎的一部分,负责所有字体的绘制。在手机图形界面渲染引擎中,手机字体渲染的速度往往是最慢的,效率往往是最低的,这使得需要大量字体渲染的界面流畅程度非常差。

发明内容

[0005] 本发明要解决的技术问题是提供一种效率较高的用户界面字体渲染方法及装置。
[0006] 为解决上述技术问题,本发明用户界面字体渲染方法包括如下步骤:
[0007] 字体缓存表建立步骤,该步骤用于建立字体缓存表,对需要渲染的字体进行缓存;
[0008] 字体查找步骤,该步骤用于在所述字体缓存表中查找并返回需要渲染的字体;其中,查找字体缓存表,若找到缓存字体,则把找到字体所需的查找次数保存在变量temp_step中,并且把access_num的值加1;access_num代表查找次数;
[0009] 按照下列方法计算平均查找次数avg_step:
[0010] avg_step=(avg_step*(access_num-1)+temp_step)/access_num;
[0011] 如果avg_step大于阀值s,则清空字体缓存表,同时access_num和avg_step重置为零
[0012] 字体渲染步骤,该步骤用于将所述查找到的需要渲染的字体渲染出来。
[0013] 为解决上述技术问题,本发明用户界面字体渲染装置包括字体缓存模块、字体查找模块和字体渲染模块;
[0014] 其中,所述字体缓存模块存放有字体缓存表,用于缓存需要渲染的字体;
[0015] 所述字体查找模块用于在所述字体缓存表中查找并返回需要渲染的字体;其中,查找字体缓存表,若找到缓存字体,则把找到字体所需的查找次数保存在变量temp_step中,并且把access_num的值加1;access_num代表查找次数;
[0016] 按照下列方法计算平均查找次数avg_step:
[0017] avg_step=(avg_step*(access_num-1)+temp_step)/access_num;
[0018] 如果avg_step大于阀值s,则清空字体缓存表,同时access_num和avg_step重置为零
[0019] 所述字体渲染模块用于将所述需要渲染的字体渲染出来。
[0020] 本发明的有益效果为:
[0021] 本发明通过建立字体缓存表,将需要渲染的字体进行预先缓存,从而能够显著提高用户界面字体渲染效率,特别使得包含大量字体渲染的动态UI(如用户界面的滑动,图标的拖动)的流畅程度不会因为大量字体渲染而降低。并且本发明还提出了字体缓存表的字体补充方案和维护方案,使本发明更具有实用价值。

附图说明

[0022] 图1为一个具体实施例的本发明方法流程示意图;
[0023] 图2为字体缓存表示意图;
[0024] 图3为本发明方法中缓存字体查找流程图;
[0025] 图4为一个具体实施例的本发明装置结构示意图。

具体实施方式

[0026] 下面结合附图和具体实施方式对本发明作进一步详细说明。
[0027] 为了使本发明的目的、技术方案及优点更加清晰明白,以下结合附图及实施例,对本发明做进一步的详细说明。应当理解,此处所描述的具体实施方案利用AMC引擎(Adobe Mobile Client,Adobe公司的手机图形引擎)作为图形引擎,并且在Arena平台(一种手机开发平台)上实现,用于解释本发明,并不用于限定本发明。
[0028] 图1为一个具体实施例的本发明方法流程示意图,如图所示,本发明用户界面字体渲染方法具体包括如下步骤:
[0029] A、建立字体缓存表,将需要渲染的字体即文字的形状存储在字体缓存表中;
[0030] B、在字体缓存表中查找需要渲染的字体,若找到则进入步骤C;若未找到,则进入步骤D;
[0031] C、返回需要渲染的字体,即返回在字体缓存表中对应的缓存位图,进入步骤E;
[0032] D、调用手机平台字体绘制接口把未在字体缓存表中查找到的需要渲染的字体保存到字体缓存表中相应位置的缓存位图中,并返回这个缓存位图,进入步骤E;
[0033] E、利用该缓存位图绘制文字,即把需要渲染的字体渲染出来。
[0034] 本发明方法在具体实现时,若在字体缓存表中未查找到需要渲染的字体,也可调用手机平台字体绘制接口把需要渲染的字体绘制出来,然后对该字体进行渲染,同时将该字体缓存到字体缓存表中。
[0035] 其中,步骤D的字体缓存过程包括:
[0036] D1、生成一个与字体相关联的内存,也就是让这个内存的帧缓冲区同字体的数据区是同一块内存;
[0037] D2、设置内存的各种属性,包括设置背景色为黑色,设置字体颜色以及字体格式;
[0038] D3、调用手机平台字体绘制接口把文字绘制到上述内存上,也就是把文字的字体保存在上述内存中,实现以缓存位图来描绘字体。
[0039] 步骤E中,字体渲染过程是一个缓存位图的拷贝过程,对于字体的缓存位图的每一个像素pixel,做如下操作:
[0040] 步骤E1、如果像素pixel的RGB值为零,则返回,否则进入步骤402;
[0041] 步骤E2、计算像素pixel在屏幕帧缓冲区中对应的像素p,把pixel的RGB值拷贝到像素p。
[0042] 字体缓存表CASHER_TABLE是缓存渲染字体的数据结构,是一个哈希链表,字体缓存表CASHER_TABLE由索引数组和缓存节点TextCasher构成,如图2所示,每一个缓存节点TextCasher包括两部分:文字信息和缓存位图。文字信息存放了文字的编码、字体名称、字体大小、字体颜色以及输出矩形范围,是判断当前需要渲染的字体和缓存在字体缓存表中的字体是否一致的依据。缓存位图存放了文字的字体,缓存位图用于渲染字体。
[0043] 缓存节点TextCasher的定义如下:
[0044]
[0045] 字体缓存表CASHER_TABLE定义如下:
[0046] #define HASH_TABLE_LENGTH 1000
[0047] TextCasher*m_tcTable[HASH_TABLE_LENGTH];
[0048] 图3是缓存字体查找的流程图,具体步骤如下:
[0049] 步骤101、利用文字的编码、字体名称、字体大小、字体颜色,利用函数ComputeHashID()计算出哈希索引值id;
[0050] 步骤102、如果m_tcTable[id]等于0,表示哈希索引值id处没有缓存节点TextCasher,则进入步骤103,否则进入步骤104;
[0051] 步骤103、在m_tcTable[id]处添加一个缓存节点TextCasher,进入步骤106;
[0052] 步骤104、查找m_tcTable[id]指向的链表,若需渲染字体的缓存节点存在,返回该缓存节点的指针,进入步骤107;否则返回该链表最后一个缓存节点的指针,进入步骤105;
[0053] 步骤105、在指向的缓存节点之后添加一个缓存节点TextCasher,进入步骤106;
[0054] 步骤106、把需要渲染的字体保存到指向的缓存节点TextCasher中,并返回该节点的指针,进入步骤107;
[0055] 步骤107、把相应缓存节点TextCasher中的缓存位图渲染出来。
[0056] 为了提高查找的效率并且不让字体缓存表占据过多的内存,需要对字体缓存表进行维护,具体方法如下:
[0057] 定义变量:access_num,代表查找次数;avg_step,代表平均查找次数。
[0058] 步骤201、查找字体缓存表,若找到缓存字体,则把找到字体所需的查找次数保存在变量temp_step中,并且把access_num的值加1;
[0059] 步骤202、按照下列方法计算平均查找次数avg_step:
[0060] avg_step=(avg_step*(access_num-1)+temp_step)/access_num;
[0061] 步骤203、如果avg_step大于阀值s,则清空字体缓存表,同时access_num和avg_step重置为零。
[0062] 通过上述方法可以让平均查找次数保持小于阀值s。阀值S为预先设定的平均查找次数阀值,可根据实际情况设定,本实施例设定s=3。
[0063] 图4为一个具体实施例的本发明装置结构示意图,如图所示,本发明用户界面字体渲染装置包括字体查找模块、字体缓存模块、字体渲染模块和字体缓存表维护模块。
[0064] 其中,字体缓存模块存放有字体缓存表,字体缓存表用于缓存需要渲染的字体。字体缓存表CASHER_TABLE是缓存渲染字体的数据结构,是一个哈希链表,字体缓存表CASHER_TABLE由索引数组和缓存节点TextCasher构成,每一个缓存节点TextCasher包括两个部分:文字信息和缓存位图。文字信息存放了文字的编码、字体名称、字体大小、字体颜色以及输出矩形范围,是判断需要渲染的字体和缓存在字体缓存表中的字体是否一致的依据。缓存位图存放了文字的字体,缓存位图用于渲染字体。
[0065] 缓存字体查找模块用于查找需要渲染的字体在字体缓存表CASHER_TABLE中的位置。
[0066] 字体缓存模块还用于将未在字体缓存表中查找到的字体缓存到字体缓存表中,调用手机平台字体绘制接口把未在字体缓存表中查找到的字体缓存到字体缓存表CASHER_TABLE中,具体实现步骤同方法中的描述,在此不再赘述。
[0067] 在本实施例中,若字体查找模块查找需要渲染的字体失败,则字体缓存模块将需要渲染的字体通过上述方案缓存到字体缓存表中,同时返回需要渲染的字体,供字体渲染模块执行。
[0068] 本实施例中由于把内存的背景色设为了黑色,黑色的RGB(RGB代表计算机图形学颜色的三个分量,即红、绿、蓝)值都为零,而字体颜色不为黑色,故在缓存位图中,字体所在的像素点的RGB值不为零,其它部分像素点的RGB值都为零。这样这个缓存位图的作用就是一个掩码,通过每个像素点的RGB值是否为零判断这个像素点是字体部分还是其余背景部分,因此本发明也把这种具有掩码功能的缓存位图称为文字的掩码位图。本发明中该掩码位图是指保存的位图是文字形状的缓存位图。
[0069] 字体渲染模块的主要功能是利用字体缓存表中的相应字体的缓存位图对字体进行高效的渲染。
[0070] 字体缓存表维护模块用于对字体缓存表进行维护,以提高查找的效率并且不让字体缓存表占据过多的内存,具体的字体缓存表维护方案同方法中的描述,在此不再赘述。
[0071] 以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应注意的是,以上所述仅为本发明的具体实施例而已,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求记载的技术方案及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。