CN101625848A - 面向嵌入式平台的矢量字库实现方法 - Google Patents
面向嵌入式平台的矢量字库实现方法 Download PDFInfo
- Publication number
- CN101625848A CN101625848A CN200910101332A CN200910101332A CN101625848A CN 101625848 A CN101625848 A CN 101625848A CN 200910101332 A CN200910101332 A CN 200910101332A CN 200910101332 A CN200910101332 A CN 200910101332A CN 101625848 A CN101625848 A CN 101625848A
- Authority
- CN
- China
- Prior art keywords
- font
- character
- pixel
- freetype
- function
- 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.)
- Granted
Links
Images
Landscapes
- Controls And Circuits For Display Device (AREA)
Abstract
本发明涉及一种面向嵌入式平台的矢量字库实现方法,它包括一种Freetype字体引擎的精简方法,一种新型TrueType字体文件格式及其设计制作方法,一种颜色混合和像素点的过滤方法,本方法结合精简后的Freetype字体引擎和新型Truetype字体文件,将精简后的Freetype字体引擎移植入嵌入式平台中,并采用本发明提供的一种颜色混合和像素点的过滤方法,实现了矢量字库在嵌入式系统的应用。这种面向嵌入式平台的矢量字库实现方法,所占用的储存容量小,程序代码量小,能显著的提高矢量字体在嵌入式系统的显示速度和显示质量。
Description
技术领域:
本发明涉及嵌入式技术与应用领域,具体讲是一种面向嵌入式平台的矢量字库实现方法。
背景技术:
随着嵌入式系统的应用越来越广泛,对嵌入式系统的界面的显示质量的要求也越来越高。而界面显示质量中,字体的显示占了举足轻重的位置,一个好的界面没有优秀的高显示质量的字体配合就无法发挥其特点和优势。目前现有的嵌入式平台中所采用的字体一般为点阵字库,虽然点阵字库使用比较灵活,占用空间不大,显示速度也较快,但是它的显示质量比较差,无法实现放大和缩小。当需要有不同大小的字体需要显示的时候,嵌入式平台中将全部修改其中的字体显示模块,这是一个相当大并且麻烦的工程。并且随着现在的嵌入式系统中越来越高的显示要求,比如较大屏幕的手机嵌入式平台,如果仍然使用原来的点阵字库,将会有非常糟糕的显示效果,在较大的显示设备上会有锯齿出现。这可以通过使用矢量字体来解决问题,矢量字体中每一个字形是通过数学曲线来描述的,它包含了字形边界上的关键点,连线的导数信息等,只要通过Freetype字体引擎读取这些数学矢量并实时渲染所需要的字体大小,便能得到很好的显示效果,不会出现点阵字体的那些锯齿。但是目前市场上还没有一个通用方法来支持矢量字库移植到嵌入式平台中,故研究基于Freetype字体引擎的矢量字库的移植具有相当的价值。
公开号为CN 101008939A的发明专利——“一种嵌入式系统的点阵字库的实现方法”,该发明提供的方法是利用Freetype字体引擎,将目标字符的编码转化成Freetype设定编码,Freetype字体引擎再根据该设定编码加载矢量字库文件中字符轮廓信息,最后Freetype字体引擎将轮廓信息转化成位图信息,转化得到的位图信息按照该发明的字库文件格式存储作为发明字库的存储信息。该发明的实质是以Freetype字体引擎为转化工具,将矢量字库文件转化成点阵字库文件,再用该发明提供的通用GUI接口函数将得到的点阵字库文件移植到嵌入式系统。
上述发明专利提供的方法,实际上是在嵌入式系统外添加了一个字库转换模块,将矢量字库文件转换成新型的点阵字库文件,再将点阵字库文件移植到嵌入式平台中,而不能做到直接将矢量字库移植到嵌入式平台中。这种方法虽然能制作比传统点阵字库显示质量较好的新型点阵字库文件,但是该方法实现的过程比较复杂,其程序代码量较多,占用储存容量也较大,影响字体在嵌入式平台中的显示速度。
发明内容:
本发明要解决的技术问题是,克服现有的技术缺陷,提供一种储存容量小,程序代码量小,能显著的提高矢量字体在嵌入式系统的显示速度的面向嵌入式平台的矢量字库实现方法。
本发明的技术解决方案是,提供一种面向嵌入式平台的矢量字库实现方法,它通过移植Freetype字体引擎取代嵌入式系统中点阵字体的资源获取模块,进而实现矢量字库在嵌入式平台的移植,它具体包括以下步骤:
(1)、用户将所需显示的目标字符集中所有字符的Unicode码,简称字符码,发送到应用程序中;
(2)、获取所述需显示目标字符集的x,y坐标位置,长度len和显示方向direction;
(3)、将所述目标字符集中的第i个字符的字符码和用户设定的该字符的大小传递给移植到嵌入式系统中的Freetype字体引擎,所述i为自1开始的自然数,且1≤i≤len,该引擎通过所接受到的字符码在新型的Truetype矢量字库文件中找到该字符,并将找到的轮廓信息转化成位图信息;
(4)、所述移植到嵌入式系统中的Freetype字体引擎将第i个字符的位图信息、该字符的大小信息渲染成第i个字符的字形信息;
(5)、获取所述第i个字符的字形信息后,调用图形设备接口GDI层中字体模块绘制接口函数,在屏幕上绘制并显示该字符;
(6)、调用嵌入式系统中自带的字体解码器接口函数,解码所述第i个字符的字形信息,并通过采用本发明提供的一种颜色混合和像素点的过滤方法,将所述字形信息显示在屏幕上;
(7)、执行i++,若i≤len,则转到步骤(3)运行,若i>len,则结束执行,所述字符在屏幕中显示完毕。
所述移植到嵌入式系统中的Freetype字体引擎为精简过的Freetype字体引擎,其精简方法包括以下步骤:
(1)、在原来的Freetype字体引擎中只抽取所需要的函数,并将其定义为全局函数;
(2)、从字体文件中加载字体,从而确定字体的字样和风格,并把通过Freetype字体引擎得到的字体信息储存在一维数组中;
(3)、装载字形图像,将字符码转换为字形索引,事先读取每个字符所对应的位置,并将每个字符的位置记录保存下来,在字体初始化时,对字符索引进行赋值,在下次字符索引时,直接用所得字符码去匹配,得到对应的位置。
所述颜色混合和像素点的过滤方法包括以下步骤:
(1)、重新定义解码器函数和颜色解码器函数;
(2)、得到所述字符的字形信息数据中需要显示的像素点个数,用y来表示;
(3)、判断y是否大于0,即是否还存在需要显示的像素点,若是,寄存器从数据流读取8个bit给变量p,其中p就是指一个像素点,若否,结束执行该算法,至此屏幕完全显示字形信息数据的像素信息;
(4)、判断变量p的大小,决定是否需过滤,若p<50,不做此像素点的颜色解码任务,out_mem_ptr和src_mem_ptr指针往后移动两位,其中out_mem_ptr是当前层即读取的数据流层的内存地址,src_mem_ptr是目标层即屏幕层的内存地址,若p>50且p<110,将屏幕背景像素值src_pixel和当前读取到的p像素值img_pixel做混合运算,混合度为100,若p>110,调用所述重新定义的解码器函数,解码得到需要显示p的像素值out_pixel;
(5)、执行屏幕显示接口函数,即把out_pixel赋值给out_mem_ptr,out_mem_ptr和src_mem_ptr指针往后移动两位;
(6)、执行y--,并跳到步骤(3)。
所述混合运算,其中背景像素值src_pixel用(R1,G1,B1)表示,p像素值img_pixel用(R2,G2,B2)表示,R1,G1,B1,R2,G2,B2的最大值都是255,对其做线性混合,公式如下:
计算得到的新像素值(R,G,B)就是所需要显示p的像素值out_pixel。
所述新型的Truetype矢量字库文件,其制作方法包括以下步骤:
(1)、在truetype造字程序中找到简体汉字的Unicode码;
(2)、在造字软件fontcreator中打开GPL协议仿宋ttf文件,并在该文件中找到所述Unicode码对应的繁体汉字,
(3)、对所述繁体汉字进行人工调整修改成所述简体汉字;
(4)、重复执行步骤1至步骤3,制作一个包含常用简体汉字的ttf文件;
(5)、人工修字调整所述简体汉字,提高字体的质量、结构;
(6)、质量检验,使所述简体汉字字形轮廓是否光滑、结构是否合理、轮廓曲线是否满足技术规范;
(7)、测试,包括字形、质量、编码、使用、显示、输出等各个方面。
本发明与现有技术相比,具有以下优点:
第一:采用将矢量字库直接移植到嵌入式平台中的方法,使显示的过程中,不需要再将矢量字库转换成为点阵字库,从而简化了显示过程的步骤,使嵌入式系统中程序的编写更加简洁、方便。
第二:采用Freetype字体引擎精简方法,即只编译自己嵌入式工程或环境需要的模块,从而使得Freetype的代码量大大减少,同时对TrueType字体格式进行处理,使其原来储存在结构体中的字形信息通过精简和若干宏定义的取消使字形信息储存至一维数组中,大大减少了内核缓存,提高整体执行速度,并且在装载字形图像的过程中省去了读取多余文件的步骤,每次需要字符索引时,只需用所得字符码去匹配就可得到相应的位置,这也很大程度上提高了程序的执行效率。
第三:采用了新型的Truetype矢量字库文件,包含常用的7000汉字,字形美观且使用字库压缩技术,储存容量较小。
第四:在字体解码显示的过程中采用本发明所述的颜色混合和像素点的过滤方法,简化了显示解码的步骤,并根据灰度的大小,对颜色进行过滤混合显示,从而使字体显得更加柔和、美观。
附图说明:
图1为本发明面向嵌入式平台的矢量字库的实现方法的流程图;
图2为本发明精简后的Freetype字体引擎渲染矢量字体得到位图信息的流程图;
图3为本发明字体解码部分颜色混合和像素点的过滤方法流程图。
具体实施方式:
下面结合附图对本发明作进一步详细的说明:
本发明提供了一种面向嵌入式平台的矢量字库的实现方法及其相关技术,包括一种Freetype字体引擎的精简方法,一种新型TrueType字体文件格式及其设计制作方法,一种颜色混合和像素点的过滤方法,结合精简后的Freetype字体引擎和新型Truetype字体文件,通过移植精简Freetype字体引擎取代嵌入式中点阵字体的资源获取模块,实现了矢量字库在嵌入式系统的应用。
本发明的实现方法主要涉及嵌入式平台的MMI层(即人机界面层),因为Freetype字体引擎的移植是在MMI层进行的。大部分嵌入式平台的MMI层分为四个部分,分别为应用程序层,GUI层(即为用户图形界面层),WGUI层(即为包装过后的用户图形界面层),和GDI层(即为图形设备接口层)。WGUI层,负责将与用户交流的功能界面分类,并且能自行绘制和自行与用户交流。GUI层,只负责绘画,不负责与用户交流。GDI层(即图形设备接口层)分为图形类接口模块,图像和字库字体模块,以及显示模块,显示模块控制每个硬件屏幕。
本发明的实现主要是在嵌入式平台的GDI层。当应用程序或者系统程序需要显示某字串到屏幕上的时候,往往先调用WGUI层的接口函数,这些函数用于包装GUI层的绘画。本发明实现的是字体模块的移植,所以直接将重点集中到一些函数名字比较敏感的函数。凡是涉及到字符,字串的打印,都是通过调用同一类函数,这类函数在这里以ShowString类函数命名。ShowString类函数中含有将字符串显示到屏幕上的函数,这类函数在这里以ShowString_internal函数命名,ShowString_internal函数中调用了大量GDI层函数,这些函数用来规定字符显示区域等。ShowString_internal函数中通过调用GDI层的字符资源检索获取模块函数,来获取所需显示字符的CharData数据,所述CharData据即显示信息数据,它为黑白点阵数据信息,简单的说就是一个汉字或字符的点阵信息(即黑白像素点的分布)。本发明需要移植Freetype字体引擎取代嵌入式中点阵字体的资源获取模块,即是将GDI层的字符资源检索获取模块函数屏蔽,并在此处加载精简后的Freetype字体引擎。本发采用ShiLiangZiKu_Engine函数,将精简后的Freetype字体引擎加载进嵌入式平台。所述ShiLiangZiKu_Engine函数为本发明实例中所创造的一个函数,它的功能是:根据用户输入的字符Unicode码,在矢量字库文件中找到与该Unicode码对应的字符,再将该字符轮廓矢量信息渲染成位图信息即字体点阵信息,转化得到的信息即是所需显示字符的CharData数据。得到CharData数据之后,ShowString_internal函数接下来调用CharData数据的解析转换函数,字体的显示工作交给了字体解码器,解码之后给出显示结果。传统嵌入式平台显示点阵字体时,字体解码器读取的是1bpp黑白信息,而开源Freetype提供了两种渲染方式:第一种渲染为1bpp黑白信息;第二种渲染为8bpp的灰度信息,所述bpp是表示图像的像素深的单位,指每个像素点的比特数,本发明中加载的精简Freetype字体引擎采用第二种渲染方法,需要重新定义字体解码器。
如图所示:图1为本发明面向嵌入式平台的矢量字库的实现方法的流程图;本发明采用的技术方案,包括以下步骤:
(1)、用户将所需显示的目标字符集中所有字符的Unicode码,简称U码串,发送到应用程序中;
(2)、获取需显示目标字符集的x,y坐标位置、所述目标字符集的长度len和所述目标字符集的显示方向direction;嵌入式系统中WGUI层包装了的GUI绘画接口函数接受应用程序发送的U码串,并给出当前需显示目标字符集的x,y坐标位置,ShowString函数接受到上层传送的所述U码串,并给出所述目标字符集的长度len和所述目标字符集的显示方向direction,接下来ShowString接口函数,调用嵌入式平台中真正GDI层之上GUI层之下的接口函数,将字符串打印到屏幕。这里以ShowString_internal表示该接口函数,ShowString函数将接受到的U码串传递给ShowString_internal函数。
(3)、将所述目标字符集中的第i个字符的UNICODE码和用户设定的该字符的大小传递给移植到嵌入式系统中的Freetype字体引擎,其中i为自1开始的自然数,且1≤i≤len,该引擎通过所接受到的UNICODE码在新型的Truetype矢量字库文件中找到该字符,并将找到的轮廓信息转化成位图信息;ShowString internal函数将所述字符中的第i个字符的Unicode码和用户设定字符的大小sizeofword传递给ShiLiangZiKu_Engine(Unicode,sizeofword),所述ShiLiangZiKu_Engine(Unicode,sizeofword)表示Freetype接口函数,Unicode是指所述字符的Unicode码,sizeofword是所述字符的大小,其为整数值;这里i的范围1≤i≤len,设定Sizeofword=20。ShiLiangZiKu_Engine(Unicode,sizeofword)所做的是把精简裁核后的Freetype字体引擎移植进来,并通过该字体引擎根据所接受到的第i个字符Unicode码在所述新型truetype矢量字库文件中找到该字符,并将找到的字符的轮廓信息转化成位图信息。
(4)、移植到嵌入式系统中的Freetype字体引擎将第i个字符的位图信息、该字符的大小信息渲染成第i个字符的字形信息;本发明采用Freetype将所述第i个字符的字形信息渲染为8bpp的灰度信息,通过256级的灰度图像表示,矢量字体可以将一个字符通过像素点与像素点之间的颜色渐变来使得字体显示变得圆滑。最终将得到的位图信息存储在一个一维数组中,我们将这个一维数组定义为CharData[]。储存在其中的位图信息为CharData数据,现有的Freetype字体引擎得到的字形信息全部存在一个结构体里,Freetype的FT_FaceRec结构描述包含了可用字段的完整列表。但是通过结构体形式的访问需要较大系统内存开销,本发明将所有字形信息均储存在对应信息的一维数组里,大大减少内核缓存,提高整体执行速度。
(5)、获取所述第i个字符的显示数据信息后,调用图形设备接口GDI层中字体模块绘制接口函数,并在屏幕上绘制并显示该字符,ShowString_internal函数调用图形设备接口中字体模块自带函数gdi_show_char()在屏幕上绘制并显示该字符,由于该过程是嵌入式系统中字体显示模块自带的一种方法,故不在此详述。
(6)、通过调用嵌入式系统中自带的字体解码器接口函数解码所述第i个字符的显示数据信息,并采用颜色混合和像素点的过滤方法,将所述显示数据信息显示在屏幕上;在本例中采用的是ABM解码器接口函数,ABM解码器字体绘制接口函数调用ABM解码器绘图接口函数,该函数主要功能是在当前活动层绘制一张图片,它负责两部分工作:初始化解码器和获取资源即所述CharData数据的内存地址。所述CharData数据是Freetype渲染所得的20×20的8bpp灰度信息,在渐变色的跨度过大,如白色渐变到黑色,和汉字较小的问题同时存在的情况下,用来表示一个笔画的像素点往往很少,这样在同时背景色与黑色相差较远的情况下,造成显示效果不佳,所以在字体解码部分,本发明提供了颜色混合和像素点的过滤方法,有效的解决了像素渐变不合理的问题。
(7)、执行i++,若i≤len,则转到第三步运行,若i>len,则结束执行,退出函数ShowString_internal(),至此,所述字符在屏幕中显示完毕。
上述函数中除ShiLiangZiKu_Engine()外,其他一般都是嵌入式系统中自带的函数,程序中可以直接调用。
所述移植到嵌入式系统中的Freetype字体引擎为精简后的Freetype字体引擎,其精简方法如下:
(1)、在原来的Freetype字体引擎中只抽取所需要的函数,并将其定义为全局函数,一般嵌入式系统中采用Freetype字体引擎需要加入Freetype2 API的头文件ft2build.h和FT_FREETYPE_H。因为Ft2build.h包含了公共Freetype2头文件的宏声明。FT_FREETYPE_H是在ftheader.h中定义的一个特别的宏,所述ftheader.h和FT_FREETYPE_H均为Freetype2中的包含的文件,故不在此赘述。这种现有的传统方法需要占据程序编译缓存,矢量字体的处理比较繁琐,即要进行矢量计算,又进行精调处理,相对于只显示黑白颜色的简单点阵字体来说慢的多。对于需高实时性且系统内核又小的嵌入式系统来说,太过繁琐,本发明对Freetype2引擎算法进行的大量的裁剪,只抽取所需的函数定义成全局函数,程序无需包含这些头文件,使得Freetype字体引擎得到很大的精简。通过只编译自己嵌入式工程所需要的模块使得Freetype2的代码量大大减少,提高编译和运行的速度,满足了嵌入式系统的实时性需求。
(2)、从字体文件中加载字体,确定字体的字样和风格,并把通过Freetype字体引擎得到的字体信息储存在一维数组中,该步骤对字体引擎的处理是打开指定路径下的字体文件。该字体是本发明自主开发的新型TrueType格式的字体。本发明仅仅使用TrueType字体格式的处理,并将其他和这个格式无关的代码通过若干宏定义的取消,这保证了最后的二进制代码的简洁紧凑性。
(3)、装载字形图像,将字符码转换为字形索引,本发明调用FT_Get_Char_Index()函数,这个函数会在选中的字符表中查找与给出的字符码对应的字形索引,把第i个字符的Unicode码转换为字形索引,Freetype开源引擎是通过每次读取字符的位置来得到索引的,文件的读取势必占用CPU内存,降低程序的执行速度。本发明采用事先读取每个字符所对应的位置,并将每个字符的位置记录保存下来。在字体初始化时就已经将字符索引进行赋值,那么每次需要字符索引时不必再去读取大量的冗余文件,只需用所得字符码去匹配就可得到对应的位置,很大程度上提高了程序的执行效率。
图2为本发明精简后的Freetype字体引擎渲染矢量字体得到位图信息的流程图,如图所示:
首先程序先根据需要添加所需函数,然后精简后的Freetype字体引擎进行初始化,之后,精简后的Freetype字体引擎打开本发明所述的一种新的矢量字体文件,并获取ttf格式的字体模块,并在找出与字符码对应的字体轮廓,根据用户设置的大小命令设定显示字符的大小,然后获取字符的字形索引,最后将字形信息转化成位图信息。
图3为本发明字体解码部分颜色混合和像素点的过滤方法流程图,如图所示:所述颜色混合和像素点的过滤方法包括以下步骤进行:
(1)、重新定义ABM解码器函数和颜色解码器函数,首先需重新定义ABM解码器:使得ABM解码器的信息输入源来自目标层的bpp。这里新定义的字体解码器函数用ABM_DECODER_WITHOUT_ALPHA_BYSUNRUN(TARGET_BPP)表示,其中TARGET_BPP为目标层的BPP,然后重新定义颜色解码器函数:将8位灰度信息转换为24位RBG888表示,再将RGB888转换为RGB565的16位颜色表示,所述RBG888表示R占8位,B占8位,G占8位,共有24位。所述RGB565表示R占5位,G占6位,B占5位,共16位。这里将RBG888转换RGB565是这样:将RBG888中R的高5位给RGB565的R,BG888中G的高6位给RGB565的G,BG888中B的高5位给RGB565的B,实现功能用rgb888_to_rgb565(color_index<<16|color_index<<8|color_index)函数来完成,其中color_index表示所提的8位灰度信息,这里就是将8位灰度信息左移16位,左移8位,得到24位RBG;
(2)、得到所述字符的CharData数据中需要显示的像素点个数,用y表示;
(3)、并判断y是否大于0,即是否还存在需要显示的像素点,若是,寄存器从数据流读取8个bit给变量p,因为内存中存放CharData数据均是以8bpp为单位的,即每个像素点用8个bit来表示,p就是一个像素点。若否,结束执行该算法,至此屏幕完全显示CharData数据像素信息,
(4)、判断变量p的大小,决定是否需过滤,如果p<50,地址为out_mem_ptr的当前像素点显示应该为“暗”,故不做颜色解码任务,out_mem_ptr和src_mem_ptr指针往后移动两位,跳到下一个像素点进行显示,其中out_mem_ptr是当前层即读取的数据的内存地址,src_mem_ptr是需显示屏幕层的内存地址。若p>50且p<110,将屏幕背景像素值src_pixel和当前读取到的p像素值img_pixel做混合运算,混合度为100。混合运算具体方法:背景像素值src_pixel用(R1,G1,B1)表示,p像素值img_pixel用(R2,G2,B2)表示,R1,G1,B1,R2,G2,B2的最大值都是255,接下来做线性混合: 计算得到的新像素值(R,G,B)就是我们最后要显示p的像素值out_pixel。若p>110,调用重新定义后ABM解码器函数,解码得到需要显示p的像素值out_pixel;
(5)、执行屏幕显示接口函数,即把p的像素值out_pixel赋值给屏幕层的内存地址out_mem_ptr,即完成当前像素点的显示,同时out_mem_ptr和src_mem_ptr指针往后移动两位跳到下一个像素点进行显示;
(6)、执行y--,并跳到步骤(3)。
所述新型的Truetype矢量字库文件,其制作方法包括以下步骤:
(1):在truetype造字程序中找到简体汉字的Unicode码;
(2):在造字软件fontcreator中打开GPL协议仿宋ttf文件,并在该文件中找到所述Unicode码对应的繁体汉字;
(3):对所述繁体汉字进行人工调整修改成所述简体汉字;
(4):重复执行步骤1至步骤3,制作一个包含常用简体汉字的ttf文件;
(5):人工修字调整所述简体汉字,提高字体的质量、结构;
(6):质量检验,使所述简体汉字字形轮廓是否光滑、结构是否合理、轮廓曲线是否满足技术规范;
(7):测试,包括字形、质量、编码、使用、显示、输出等各个方面。
以上所介绍的,仅仅是本发明的技术思想与特点,其目的在使用本领域技术人员能够了解本发明的内容并据以实施,当不能以此来限定本发明实施的范围,即大凡根据本发明所揭示的精神和原则所作的任何修改、等同替换和改进等,仍应涵盖在本发明的专利范围内。
Claims (5)
1,一种面向嵌入式平台的矢量字库实现方法,其特征在于:它包括以下步骤:
(1)、用户将所需显示的目标字符集中所有字符的Unicode码,简称字符码,发送到应用程序中;
(2)、获取所述需显示目标字符集的x,y坐标位置,长度len和显示方向direction;
(3)、将所述目标字符集中的第i个字符的字符码和用户设定的该字符的大小传递给移植到嵌入式系统中的Freetype字体引擎,所述i为自1开始的自然数,且1≤i≤len,该引擎通过所接受到的字符码在新型的Truetype矢量字库文件中找到该字符,并将找到的轮廓信息转化成位图信息;
(4)、所述移植到嵌入式系统中的Freetype字体引擎将第i个字符的位图信息、该字符的大小信息渲染成第i个字符的字形信息;
(5)、获取所述第i个字符的字形信息后,调用图形设备接口层即GDI层中字体模块绘制接口函数,在屏幕上绘制并显示该字符;
(6)、调用嵌入式系统中自带的字体解码器接口函数,解码所述第i个字符的字形信息,并通过采用本发明提供的一种颜色混合和像素点的过滤方法,将所述字形信息显示在屏幕上;
(7)、执行i++,若i≤len,则转到步骤(3)运行,若i>len,则结束执行,所述字符在屏幕中显示完毕。
2,根据权利要求1所述的一种面向嵌入式平台的矢量字库实现方法,其特征在于:所述移植到嵌入式系统中的Freetype字体引擎为精简过的Freetype字体引擎,其精简方法包括以下步骤:
(1)、在原来的Freetype字体引擎中只抽取所需要的函数,并将其定义为全局函数;
(2)、从字体文件中加载字体,从而确定字体的字样和风格,并把通过Freetype字体引擎得到的字体信息储存在一维数组中;
(3)、装载字形图像,将字符码转换为字形索引,事先读取每个字符所对应的位置,并将每个字符的位置记录保存下来,在字体初始化时,对字符索引进行赋值,在下次字符索引时,直接用所得字符码去匹配,得到对应的位置。
3,根据权利要求1所述的一种面向嵌入式平台的矢量字库实现方法,其特征在于:所述颜色混合和像素点的过滤方法包括以下步骤:
(1)、重新定义解码器函数和颜色解码器函数;
(2)、得到所述字符的字形信息数据中需要显示的像素点个数,用y来表示;
(3)、判断y是否大于0,即是否还存在需要显示的像素点,若是,寄存器从数据流读取8个bit给变量p,其中p就是指一个像素点,若否,结束执行该算法,至此屏幕完全显示字形信息数据的像素信息;
(4)、判断变量p的大小,决定是否需过滤,若p<50,不做此像素点的颜色解码任务,out_mem_ptr和src_mem_ptr指针往后移动两位,跳到下一个像素点进行显示,其中out_mem_ptr是当前层即读取的数据的内存地址,src_mem_ptr是需显示屏幕层的内存地址,若p>50且p<110,将屏幕背景像素值src_pixel和当前读取到的p像素值img_pixel做混合运算,混合度为100,若p>110,调用所述重新定义的解码器函数,解码得到需要显示p的像素值out_pixel;
(5)、执行屏幕显示接口函数,即把p的像素值out_pixel赋值给屏幕层的内存地址out_mem_ptr,即完成当前像素点的显示,同时out_mem_ptr和src_mem_ptr指针往后移动两位跳到下一个像素点进行显示;
(6)、执行y--,并跳到步骤(3)。
4,根据权利要求2所述的一种颜色混合和像素点的过滤方法,其特征在于:所述混合运算,背景像素值src_pixel用(R1,G1,B1)表示,p像素值img_pixel用(R2,G2,B2)表示,R1,G1,B1,R2,G2,B2的最大值都是255,对其做线性混合,公式如下:
计算得到的新像素值(R,G,B)就是所需要显示p的像素值out_pixel。
5,根据权利要求1所述的一种面向嵌入式平台的矢量字库实现方法,其特征在于:所述新型的Truetype矢量字库文件,其制作方法包括以下步骤:
(1)、在truetype造字程序中找到简体汉字的Unicode码;
(2)、在造字软件fontcreator中打开GPL协议仿宋ttf文件,并在该文件中找到所述Unicode码对应的繁体汉字,
(3)、对所述繁体汉字进行人工调整修改成所述简体汉字;
(4)、重复执行步骤1至步骤3,制作一个包含常用简体汉字的ttf文件;
(5)、人工修字,调整所述简体汉字,提高字体的质量、结构;
(6)、质量检验,使所述简体汉字字形轮廓是否光滑、结构是否合理、轮廓曲线是否满足技术规范;
(7)、测试,包括测试字形、质量、编码、使用、显示、输出等各个方面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101013328A CN101625848B (zh) | 2009-07-28 | 2009-07-28 | 面向嵌入式平台的矢量字库实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101013328A CN101625848B (zh) | 2009-07-28 | 2009-07-28 | 面向嵌入式平台的矢量字库实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101625848A true CN101625848A (zh) | 2010-01-13 |
CN101625848B CN101625848B (zh) | 2011-06-22 |
Family
ID=41521670
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101013328A Expired - Fee Related CN101625848B (zh) | 2009-07-28 | 2009-07-28 | 面向嵌入式平台的矢量字库实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101625848B (zh) |
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957837A (zh) * | 2010-09-08 | 2011-01-26 | 东莞电子科技大学电子信息工程研究院 | 一种笔划矢量字库的存取方法 |
CN102074221A (zh) * | 2011-01-06 | 2011-05-25 | 深圳芯邦科技股份有限公司 | 一种字符显示方法及装置 |
CN102210149A (zh) * | 2008-12-31 | 2011-10-05 | 三星电子株式会社 | 以位图格式对图像编码/解码的方法和装置 |
CN102262784A (zh) * | 2011-08-02 | 2011-11-30 | 杭州士兰微电子股份有限公司 | 基于图像压缩的字库编码方法和解码方法 |
CN102340635A (zh) * | 2010-07-14 | 2012-02-01 | Tcl集团股份有限公司 | 一种多媒体播放设备及其文件的文字显示方法和装置 |
CN102509329A (zh) * | 2011-10-12 | 2012-06-20 | 盛乐信息技术(上海)有限公司 | 渲染字体的方法及系统 |
CN102522067A (zh) * | 2011-10-19 | 2012-06-27 | 长安大学 | 基于ra8870控制器的液晶模块自定义符号和图形的显示方法 |
CN102567295A (zh) * | 2010-12-21 | 2012-07-11 | 北大方正集团有限公司 | 用于嵌入式设备的字体处理方法和装置 |
CN103488441A (zh) * | 2013-09-06 | 2014-01-01 | 深圳市新国都技术股份有限公司 | 一种阿拉伯语在pos机上打印的实现方法 |
CN103678261A (zh) * | 2013-12-26 | 2014-03-26 | 深圳市开立科技有限公司 | 一种快速显示ttf字体的方法、装置及设备 |
CN105138355A (zh) * | 2015-08-10 | 2015-12-09 | 北京金山安全软件有限公司 | 应用程序的界面中元素的插入方法及装置、电子设备 |
CN105512308A (zh) * | 2015-12-11 | 2016-04-20 | 中国航空工业集团公司西安航空计算技术研究所 | 一种字库智能加速绘制方法 |
CN105551450A (zh) * | 2016-03-10 | 2016-05-04 | 广东乐心医疗电子股份有限公司 | 一种段式液晶显示屏显示驱动方法与装置 |
CN105549817A (zh) * | 2015-12-09 | 2016-05-04 | 广州阿里巴巴文学信息技术有限公司 | 字体包的生成方法、装置和图形的展示方法、装置 |
CN107704615A (zh) * | 2017-10-24 | 2018-02-16 | 北京有字库网络科技有限公司 | 基于中文字体子集化的网页字体显示方法及系统 |
CN108986193A (zh) * | 2018-07-10 | 2018-12-11 | 武汉国遥新天地信息技术有限公司 | 一种三维文字描边绘制方法 |
CN109358901A (zh) * | 2018-12-06 | 2019-02-19 | 深圳高通半导体有限公司 | 一种可解码点阵字库的处理器芯片及实现方法 |
CN109816896A (zh) * | 2018-12-21 | 2019-05-28 | 福建新大陆支付技术有限公司 | 一种基于pos机的多线程打印方法及pos机 |
CN109887197A (zh) * | 2018-12-21 | 2019-06-14 | 福建新大陆支付技术有限公司 | 一种基于pos机的矢量字体打印方法及pos机 |
CN109992221A (zh) * | 2019-04-12 | 2019-07-09 | 深圳高通半导体有限公司 | 一种用于矢量字库运算的处理器芯片的实现方法 |
CN110765072A (zh) * | 2018-07-27 | 2020-02-07 | 珠海金山办公软件有限公司 | 一种保存文件的方法及装置 |
WO2020224388A1 (zh) * | 2019-05-06 | 2020-11-12 | 腾讯科技(深圳)有限公司 | 元素渲染方法、装置、计算机可读存储介质和计算机设备 |
CN112069770A (zh) * | 2020-09-17 | 2020-12-11 | 中国航空无线电电子研究所 | 一种基于Vaps XT的改进型字体生成方法 |
CN112100980A (zh) * | 2020-09-21 | 2020-12-18 | 湖南省汉星信息科技有限责任公司 | 附加信息文字的显示方法、装置、设备及存储介质 |
CN114791843A (zh) * | 2022-06-22 | 2022-07-26 | 武汉海微科技有限公司 | 文字显示方法、装置、设备及存储介质 |
CN114861595A (zh) * | 2022-03-22 | 2022-08-05 | 电子科技大学 | 一种基于矢量线条变换的个性字体生成方法 |
US11928419B2 (en) | 2020-09-21 | 2024-03-12 | Boe Technology Group Co., Ltd. | Information display method and apparatus, and storage medium and electronic device |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1105767A (zh) * | 1994-01-17 | 1995-07-26 | 北京联想计算机集团公司 | 矢量字的硬件还原方法 |
AU2002311599A1 (en) * | 2001-06-14 | 2003-01-02 | Vidius Inc. | A method and a system for embedding textual forensic information |
US7831908B2 (en) * | 2005-05-20 | 2010-11-09 | Alexander Vincent Danilo | Method and apparatus for layout of text and image documents |
EP1736895A1 (en) * | 2005-06-21 | 2006-12-27 | PDFlib GmbH | Method of determining Unicode values corresponding to the text in digital documents |
CN101192212B (zh) * | 2006-11-20 | 2012-09-05 | 中兴通讯股份有限公司 | 一种在终端上实现带边框字体的系统与方法 |
CN101008939A (zh) * | 2007-01-25 | 2007-08-01 | 深圳创维-Rgb电子有限公司 | 一种嵌入式系统的点阵字库的实现方法 |
-
2009
- 2009-07-28 CN CN2009101013328A patent/CN101625848B/zh not_active Expired - Fee Related
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102210149B (zh) * | 2008-12-31 | 2014-04-23 | 三星电子株式会社 | 以位图格式对图像编码/解码的方法和装置 |
US8824810B2 (en) | 2008-12-31 | 2014-09-02 | Samsung Electronics Co., Ltd. | Method and apparatus for encoding/decoding image in bitmap format using reduced number of bitmap indices |
CN102210149A (zh) * | 2008-12-31 | 2011-10-05 | 三星电子株式会社 | 以位图格式对图像编码/解码的方法和装置 |
CN102340635A (zh) * | 2010-07-14 | 2012-02-01 | Tcl集团股份有限公司 | 一种多媒体播放设备及其文件的文字显示方法和装置 |
CN101957837A (zh) * | 2010-09-08 | 2011-01-26 | 东莞电子科技大学电子信息工程研究院 | 一种笔划矢量字库的存取方法 |
CN102567295A (zh) * | 2010-12-21 | 2012-07-11 | 北大方正集团有限公司 | 用于嵌入式设备的字体处理方法和装置 |
CN102074221A (zh) * | 2011-01-06 | 2011-05-25 | 深圳芯邦科技股份有限公司 | 一种字符显示方法及装置 |
CN102262784A (zh) * | 2011-08-02 | 2011-11-30 | 杭州士兰微电子股份有限公司 | 基于图像压缩的字库编码方法和解码方法 |
CN102509329A (zh) * | 2011-10-12 | 2012-06-20 | 盛乐信息技术(上海)有限公司 | 渲染字体的方法及系统 |
CN102509329B (zh) * | 2011-10-12 | 2013-05-29 | 盛乐信息技术(上海)有限公司 | 渲染字体的方法及系统 |
CN102522067A (zh) * | 2011-10-19 | 2012-06-27 | 长安大学 | 基于ra8870控制器的液晶模块自定义符号和图形的显示方法 |
CN103488441B (zh) * | 2013-09-06 | 2016-05-11 | 深圳市新国都技术股份有限公司 | 一种阿拉伯语在pos机上打印的实现方法 |
CN103488441A (zh) * | 2013-09-06 | 2014-01-01 | 深圳市新国都技术股份有限公司 | 一种阿拉伯语在pos机上打印的实现方法 |
CN103678261A (zh) * | 2013-12-26 | 2014-03-26 | 深圳市开立科技有限公司 | 一种快速显示ttf字体的方法、装置及设备 |
CN105138355A (zh) * | 2015-08-10 | 2015-12-09 | 北京金山安全软件有限公司 | 应用程序的界面中元素的插入方法及装置、电子设备 |
CN105549817A (zh) * | 2015-12-09 | 2016-05-04 | 广州阿里巴巴文学信息技术有限公司 | 字体包的生成方法、装置和图形的展示方法、装置 |
CN105512308A (zh) * | 2015-12-11 | 2016-04-20 | 中国航空工业集团公司西安航空计算技术研究所 | 一种字库智能加速绘制方法 |
CN105551450A (zh) * | 2016-03-10 | 2016-05-04 | 广东乐心医疗电子股份有限公司 | 一种段式液晶显示屏显示驱动方法与装置 |
CN105551450B (zh) * | 2016-03-10 | 2018-03-27 | 中山乐心电子有限公司 | 一种段式液晶显示屏显示驱动方法与装置 |
CN107704615A (zh) * | 2017-10-24 | 2018-02-16 | 北京有字库网络科技有限公司 | 基于中文字体子集化的网页字体显示方法及系统 |
CN108986193A (zh) * | 2018-07-10 | 2018-12-11 | 武汉国遥新天地信息技术有限公司 | 一种三维文字描边绘制方法 |
CN110765072A (zh) * | 2018-07-27 | 2020-02-07 | 珠海金山办公软件有限公司 | 一种保存文件的方法及装置 |
CN109358901B (zh) * | 2018-12-06 | 2023-08-25 | 深圳高通半导体有限公司 | 一种可解码点阵字库的处理器芯片及实现方法 |
CN109358901A (zh) * | 2018-12-06 | 2019-02-19 | 深圳高通半导体有限公司 | 一种可解码点阵字库的处理器芯片及实现方法 |
CN109816896A (zh) * | 2018-12-21 | 2019-05-28 | 福建新大陆支付技术有限公司 | 一种基于pos机的多线程打印方法及pos机 |
CN109887197A (zh) * | 2018-12-21 | 2019-06-14 | 福建新大陆支付技术有限公司 | 一种基于pos机的矢量字体打印方法及pos机 |
CN109992221A (zh) * | 2019-04-12 | 2019-07-09 | 深圳高通半导体有限公司 | 一种用于矢量字库运算的处理器芯片的实现方法 |
WO2020224388A1 (zh) * | 2019-05-06 | 2020-11-12 | 腾讯科技(深圳)有限公司 | 元素渲染方法、装置、计算机可读存储介质和计算机设备 |
US11741648B2 (en) | 2019-05-06 | 2023-08-29 | Tencent Technology (Shenzhen) Company Limited | Element rendering method and apparatus, computer readable storage medium, and computer device |
CN112069770A (zh) * | 2020-09-17 | 2020-12-11 | 中国航空无线电电子研究所 | 一种基于Vaps XT的改进型字体生成方法 |
CN112069770B (zh) * | 2020-09-17 | 2024-04-12 | 中国航空无线电电子研究所 | 一种基于Vaps XT的改进型字体生成方法 |
CN112100980A (zh) * | 2020-09-21 | 2020-12-18 | 湖南省汉星信息科技有限责任公司 | 附加信息文字的显示方法、装置、设备及存储介质 |
US11928419B2 (en) | 2020-09-21 | 2024-03-12 | Boe Technology Group Co., Ltd. | Information display method and apparatus, and storage medium and electronic device |
CN114861595A (zh) * | 2022-03-22 | 2022-08-05 | 电子科技大学 | 一种基于矢量线条变换的个性字体生成方法 |
CN114861595B (zh) * | 2022-03-22 | 2023-04-07 | 电子科技大学 | 一种基于矢量线条变换的个性字体生成方法 |
CN114791843A (zh) * | 2022-06-22 | 2022-07-26 | 武汉海微科技有限公司 | 文字显示方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101625848B (zh) | 2011-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101625848B (zh) | 面向嵌入式平台的矢量字库实现方法 | |
CN101699426B (zh) | 文档格式转化系统及方法 | |
US7283129B1 (en) | Display control device and reproduction display device for electronic books | |
CN100356372C (zh) | 计算机版式文件生成方法和打开方法 | |
CN101873451B (zh) | 一种实现在屏显示字符显示的方法及装置 | |
US20080273804A1 (en) | Image Transformation | |
CN101008939A (zh) | 一种嵌入式系统的点阵字库的实现方法 | |
CN106204474A (zh) | 局部多等级色调映射运算器 | |
JP7165272B2 (ja) | 動画データ符号化/復号方法、装置、プログラム及びコンピュータ装置 | |
CN105844683A (zh) | 基于Canvas和WebWorker的像素差逐帧动画的实现方法 | |
US10133711B2 (en) | Display apparatus and control method thereof | |
CN106327453A (zh) | 一种拼合图片资源的方法及图片资源拼合装置 | |
CN101790749B (zh) | 多点采样绘制二维矢量图像 | |
CN105719321A (zh) | 一种压缩纹理的方法及装置 | |
CN104113757A (zh) | 颜色缓冲压缩 | |
CN102572219A (zh) | 移动终端及其图像处理方法 | |
CN101692205A (zh) | 三维财经分析软件 | |
CN101237543B (zh) | 字幕窗口属性设定方法及相关电视系统 | |
CN1196069C (zh) | 超级文本显示系统 | |
CN1271566C (zh) | 复用电子相框的数字图像文件合成的方法 | |
CN102801936B (zh) | 实现在屏显示的方法 | |
CN113573125B (zh) | 一种基于svg字库的字幕渲染方法及系统 | |
US6912305B1 (en) | Computer animation | |
CN102023838B (zh) | Mrc图片文件的处理方法及系统 | |
US20080055319A1 (en) | Apparatus and Method of Conversing Data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110622 Termination date: 20130728 |