在上一节里面,我们显示的是点阵字体。这种字体比较简单,但是它有一个缺点就是,一旦选定了字库,每个字符的大小就确定了,无法更改。在本节里面我们将引入矢量字体的概念,矢量字体将弥补点阵字体无法更改字体大小的缺点。
1、原理简述
一个字可以用多条曲线来表示,而对于每条曲线我们保存其关键点,这样就可以用来表示这个字了。
我们想要显示的时候,就取出这些关键点,并采用平滑的曲线将这些关键点连接起来,最后填充闭合空间。
想要放大或缩小的时候,只需要按比例缩放改变关键点的相对位置就可以了!
2、显示过程
(1)在字体文件中保存着对应着不同编码类型的文字,当然其保存的方法就是保存关键点以及相对位置
(2)根据文字的编码值从字体文件中找到对应的文字,即glyph,当然找到的是其关键点和相对位置
(3)设置字体大小
(4)用某些函数把glyph里的点缩放为设置的字体大小
(5)转换为位图点阵
(6)在LCD上显示出来
3、freetype2
上面我们说了矢量字体的显示过程,那么具体应该怎么操作呢?这就需要freetype2了,下面我们来详细说一下:
(1)初始化库:FT_Init_FreeType
(1)初始化库:FT_Init_FreeType
(2)加载字体face:
FT_New_Face:从文件中加载字体
FT_New_Memory_Face:从内存中加载字体
(3)设置大小
FT_Set_Char_Size
FT_Set_Pixel_Sizes
(4)根据字符的编码值加载glyph
a:FT_Select_CharMap( face, FT_ENCODING_BIG5 );
选择编码方式
b:FT_Get_Char_Index( face, charcode )
把字符编码转换为索引值,根据该索引就可以找到glyph
c:FT_Load_Glyph( face,glyph_index, load_flags );
从face中取出glyph
d:FT_Render_Glyph( face->glyph, render_mode );
将glyph转换为位图
(5)变换:移动、旋转
FT_Set_Transform
测试FreeType提供的demo程序(1)
简介:
2.3 使用freetype来显示任意大小的文字
2.3.1节_数码相框_freetype理论介绍
2.3.2节_数码相框_在PC上测试freetype
在PC:安装freetype-2.4.10.tar.bz2
tar xjf freetype-2.4.10.tar.bz2
./configure
make
sudo make install
编译
gcc -o example1 example1.c -I /usr/local/include/freetype2 -lfreetype -lm
指定字符
gcc -finput-charset=GBK -fexec-charset=UTF-8 -o example1 example1.c -I /usr/local/include/freetype2 -lfreetype -lm
测试
./example1 ./simsun.ttc abc
一 代码如下
/* example1.c
* This small program shows how to print a rotated string with the
* FreeType 2 library.
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ft2build.h>
#include FT_FREETYPE_H
#define WIDTH 80
#define HEIGHT 80
/* origin is the upper left corner */
unsigned char image[HEIGHT][WIDTH];
/* Replace this function with something useful. */