FreeType的使用

在嵌入式环境中显示字体,如果采用点阵的方式,要先取得汉字的点阵表示形式,然后根据点阵中每一位是否为1来决定是否对屏幕上相应的像素赋值;如果采用矢量字体的话,例如使用freetype库来显示TrueType类型的字体时,其大致的过程如下:
1.初始化库

1  FT_Library library;
2 FT_Face face;
3
  FT_Error error  =  FT_Init_FreeType(  & library ); 


2. 加载相应的字体文件

error  =  FT_New_Face( library,  " /usr/share/fonts/truetype/arial.ttf " 0 & face );


3. 设置字体的大小  

1  error  =  FT_Set_Char_Size(face,  /*  handle to face object  */   
2     0 /*  char_width in 1/64th of points  */
3     16 * 64 /*  char_height in 1/64th of points  */
4     300 /*  horizontal device resolution  */
5     300  );  /*  vertical device resolution  */
6 
7    error  =  FT_Set_Pixel_Sizes(face,  /*  handle to face object  */
8     0 /*  pixel_width  */
9     16  );  /*  pixel_height  */


4. 加载字符的glyph

1  glyph_index  =  FT_Get_Char_Index( face, charcode );
2 
3  error  =  FT_Load_Glyph(face,  /*  handle to face object  */
4    glyph_index,  /*  glyph index  */
5    load_flags );  /*  load flags, see below  */
6 
7  error  =  FT_Render_Glyph( face -> glyph,  /*  glyph slot  */
8    render_mode );  /*  render mode  */


5. 字体变换(旋转和缩放)

1  error  =  FT_Set_Transform( face,  /*  target face object  */
2     & matrix,  /*  pointer to 2x2 matrix  */
3     & delta );  /*  pointer to 2d vector  */


6. 把字符显示出来

1  draw_bitmap(  & slot -> bitmap, pen_x  +  slot -> bitmap_left, pen_y  -  slot -> bitmap_top );
这份文档提供了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、付费专栏及课程。

余额充值