数码相框_freetype理论(3)

数码相框_freetype理论(3)

 

上一节中,是从点阵字库里面,把英文字母或者汉字的字模取出来,在LCD上显示。

这种方法缺点就是:一旦选定点阵文件后,这个文字的大小就确定下来了,不能缩放。

 

 

矢量字体

将汉字的笔画边缘用直线段描述成封闭的曲线,并将线段各端点的坐标经压缩存储,如下图所示:

 

矢量字体文件:

1、存放的是若干条闭合曲线的关键点

2、使用数学曲线 (贝塞尔曲线) 连接关键点。

3、填充闭合曲线的内部空间

 

 

freetype库(处理矢量字体)

例如在字体文件simsun.ttc中,前面会有一个charmaps(编码格式GBK、Unicode...),还有对应的glyph。由于每个汉字的笔划不一样,从而每个汉字数据长度也不同,所以只能采用索引的方法。因而每种矢量字库都是由两部分组成,一部分是汉字的索引信息,一部分是汉字的字形(glyph)数据。

字体文件中,含有charmaps(含有多种编码)。字体文件中,每个文字就是一个glyph(含有关键点)

想象一个文字的显示过程:

1、给定一个文字,‘A’--0x41,"中"--GBK、unicode、BIG5

2、根据“编码值”从字体文件中找到“glyph”(glyph含有关键点)

3、设置字体大小

4、用某些函数把glyph里的点缩放为"字体大小"

5、把glyph转换为位图点阵

6、在LCD上显示出来

 

 

怎么写代码:

freetype是一个开源的字体引擎,支持多种字符集编码(utf-8等)

freetype库下载:https://sourceforge.net/projects/freetype/files/freetype2/2.4.10/

参考:freetype-doc-2.4.10\freetype-2.4.10\docs\tutorial\step1.html或者https://wenku.baidu.com/view/e7149f6748d7c1c708a14574.html(中文)

face对应一个字体文件,例如:simsun.ttc(新宋体)

1、Initialize the library初始化库:FT_Init_FreeType()

2、选择Charmap(字符编码GBK、BIG5),默认为Unicode:FT_Select_CharMap()

3、Load a font face加载字体:FT_New_Face(打开字体文件)

4、Setting the current pixel size设置字体大小:

  • FT_Set_Char_Size()
  • FT_Set_Pixel_Size()

5、根据字符的编码值,加载glyph

  • 根据编码值找到对应的索引值:glyph_index = FT_Get_Char_Index(face, charcode)
  • 从face字体文件中取出glyph:FT_Load_Glyph(face, glyph_index, ...)
  • 转换为位图:FT_Render_Glyph()

6、Glyph transformations变换(移动、旋转)

FT_Set_Transform(face, &matrix, &delta)matrix矩阵,可以设置旋转角度;delta偏移位置,移动到其他位置。

 

这份文档提供了FreeType 2函数库设计与实现的细节。本文档的目标是让开发人员更好的理解FreeType 2是如何组织的,并让他们扩充、定制和调试它。 首先,我们先了解这个库的目的,也就是说,为什么会写这个库: * 它让客户应用程序方便的访问字体文件,无论字体文件存储在哪里,并且与字体格式无关。 * 方便的提取全局字体数据,这些数据在平常的字体格式中普遍存在。(例如:全局度量标准,字符编码/字符映射表,等等) * 方便的提取某个字符的字形数据(度量标准,图像,名字,其他任何东西) * 访问字体格式特定的功能(例如,SFNT表,多重控制,OpenType轮廓表) Freetype 2的设计也受如下要求很大的影响: * 高可移植性。这个库必须可以运行在任何环境中。这个要求引入了一些非常激烈的选择,这些是FreeType2的低级系统界面的一部分。 * 可扩展性。新特性应该可以在极少改动库基础代码的前提下添加。这个要求引入了非常简单的设计:几乎所有操作都是以模块的形式提供的。 * 可定制。它应该能够很容易建立一个只包含某个特定项目所需的特性的版本。当你需要集成它到一个嵌入式图形库的字体服务器中时,这是非常重要的。 * 简洁高效。这个库的主要目标是只有很少cpu和内存资源的嵌入式系统。 这份文档的其他部分分为几个部分。首先,一些章节介绍了库的基本设计以及Freetype 2内部对象/数据的管理。 接下来的章节专注于库的定制和与这个话题相关的系统特定的界面,如何写你自己的模块和如何按需裁减库初始化和编译。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值