嵌入式 FreeType2教程

本文是FreeType2教程的第一部分,介绍了如何初始化库、打开字体文件、选择字符大小、装载字形图像并进行渲染。内容包括FreeType2库的头文件引用、库初始化、字体face的创建、字符尺寸设置、字形装载和渲染,以及如何处理字符表和字形变换。示例代码展示了如何简单地渲染和旋转文本。
摘要由CSDN通过智能技术生成
第一步 -- 简易的字形装载

介绍


这是“FreeType2 教程”的第一部分。它将教会你如何:

* 初始化库
* 通过创建一个新的 face 对象来打开一个字体文件
* 以点或者象素的形式选择一个字符大小
* 装载一个字形(glyph)图像,并把它转换为位图
* 渲染一个简单的字符串
* 容易地渲染一个旋转的字符串

1.头文件

下面的内容是编译一个使用了FreeType2库的应用程序所需要的指令。请谨慎阅读,自最近一次版本更新后我们已经更改了少许东西。

1.FreeType2 include 目录

你必须把FreeType2头文件的目录添加到编译包含(include)目录中。

注意,现在在Unix系统,你可以运行freetype-config脚本加上--cflags选项来获得正确的编译标记。这个脚本也可以用来检查安装在你系统中的库的版本,以及需要的库和连接标记。

2. 包含名为ft2build.h的文件

Ft2build.h包含了接下来要#include的公共FreeType2头文件的宏声明。

3. 包含主要的FreeType2 API头文件

你要使用FT_FREETYPE_H宏来完成这个工作,就像下面这样:

#include
#include FT_FREETYPE_H

FT_FREETYPE_H是在ftheader.h中定义的一个特别的宏。Ftheader.h包含了一些安装所特定的宏,这些宏指名了FreeType2API的其他公共头文件。

你可以阅读“FreeType 2 API参考”的这个部分来获得头文件的完整列表。

#include语句中宏的用法是服从ANSI的。这有几个原因:

* 这可以避免一些令人痛苦的与FreeType 1.x公共头文件的冲突。

*宏名字不受限于DOS的8.3文件命名限制。象FT_MULTIPLE_MASTERS_H或FT_SFNT_NAMES_H这样的名字比真实的文件名ftmm.h和fsnames.h更具可读性并且更容易理解。

* 它允许特别的安装技巧,我们不在这里讨论它。

注意:从FreeType2.1.6开始,旧式的头文件包含模式将不会再被支持。这意味着现在如果你做了象下面那样的事情,你将得到一个错误:

#include
#include
. . .

2. 初始化库

简单地创建一个FT_Library类型的变量,例如library,然后象下面那样调用函数FT_Init_FreeType:

#include
#include FT_FREETYPE_H

FT_LIBRARY library;

. . .

Error = FT_Init_FreeType ( &library );
If ( error )
{
. . . 当初始化库时发生了一个错误 . . .
}

这个函数负责下面的事情:

* 它创建一个FreeType 2库的新实例,并且设置句柄library为它。

* 它装载库中FreeType所知道的每一个模块。除了别的以外,你新建的library对象可以优雅地处理TrueType, Type1, CID-keyed 和OpenType/CFF字体。

就像你所看到的,这个函数返回一个错误代码,如同FreeTypeAPI的大部分其他函数一样。值为0的错误代码始终意味着操作成功了,否则,返回值指示错误,library设为NULL。

3.装载一个字体face

a.从一个字体文件装载


应用程序通过调用FT_New_Face创建一个新的face对象。一个face对象描述了一个特定的字样和风格。例如,’Times NewRoman Regular’和’Times New Roman Italic’对应两个不同的face。

FT_Library library;
FT_Face face;

error = FT_Init_FreeType( &library );
if ( error ) { ... }

error = FT_New_Face( library,
"/usr/share/fonts/truetype/arial.ttf",
0,
&face );
if ( error == FT_Err_Unknown_File_Format )
{
... 可以打开和读这个文件,但不支持它的字体格式
}
else if ( error )
{
... 其它的错误码意味着这个字体文件不能打开和读,或者简单的说它损坏了...
}

就如你所想到的,FT_NEW_Face打开一个字体文件,然后设法从中提取一个face。它的参数为:

Library
一个FreeType库实例的句柄,face对象从中建立

Filepathname
字体文件路径名(一个标准的C字符串)

Face_index
某些字体格式允许把几个字体face嵌入到同一个文件中。
这个索引指示你想装载的face。
如果这个值太大,函数将会返回一个错误。Index 0总是正确的。

Face
一个指向新建的face对象的指针。
当失败时其值被置为NULL。

要知道一个字体文件包含多少个face,只要简单地装载它的第一个face(把face_index设置为0),face->num_faces的值就指示出了有多少个fa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值