数码相框——矢量字体原理(1)

本文介绍数码相框中如何使用矢量字体,以克服点阵字体大小固定的限制。通过FreeType库,我们可以实现显示任意大小的字体。在PC上编译并测试freetype demo程序,以加载和显示GB2312编码的字符。
摘要由CSDN通过智能技术生成

在上一节里面,我们显示的是点阵字体。这种字体比较简单,但是它有一个缺点就是,一旦选定了字库,每个字符的大小就确定了,无法更改。在本节里面我们将引入矢量字体的概念,矢量字体将弥补点阵字体无法更改字体大小的缺点。

1、原理简述
一个字可以用多条曲线来表示,而对于每条曲线我们保存其关键点,这样就可以用来表示这个字了。
我们想要显示的时候,就取出这些关键点,并采用平滑的曲线将这些关键点连接起来,最后填充闭合空间。
想要放大或缩小的时候,只需要按比例缩放改变关键点的相对位置就可以了!

2、显示过程
(1)在字体文件中保存着对应着不同编码类型的文字,当然其保存的方法就是保存关键点以及相对位置
(2)根据文字的编码值从字体文件中找到对应的文字,即glyph,当然找到的是其关键点和相对位置
(3)设置字体大小
(4)用某些函数把glyph里的点缩放为设置的字体大小
(5)转换为位图点阵
(6)在LCD上显示出来

3、freetype2
上面我们说了矢量字体的显示过程,那么具体应该怎么操作呢?这就需要freetype2了,下面我们来详细说一下:
(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. */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值