爱笑的姑娘|使用 freetype 显示单个文字( 三 )

② 加载字体文件 , 保存在 /* create face object */162 /* error handling omitted */163 slot = face->glyph;第 163 行是从 face 中获得 FT_GlyphSlot , 后面的代码中文字的位图就是保存在 FT_GlyphSlot 里 。
③ 设置字体大小
165 FT_Set_Pixel_Sizes(face, font_size, 0);④ 根据编码值得到位图
使用 FT_Load_Char 函数 , 就可以实现这 3 个功能:
a. 根据编码值获得 glyph_index:FT_Get_Char_Index
b. 根据 glyph_idex 取出 glyph:FT_Load_Glyph
c. 渲染出位图:FT_Render_Glyph
代码如下:
175 /* load glyph image into the slot (erase previous one) */176 error = FT_Load_Char( face, chinese_str[0], FT_LOAD_RENDER );3. 在屏幕上显示位图
位图里的数据格式是怎样的?参考 example1.c 的代码 , 可以得到下面这个图:
爱笑的姑娘|使用 freetype 显示单个文字要在屏幕上显示出这些位图 , 并不复杂:
183 draw_bitmap( draw_bitmap 函数代码如下 , 由于位图中每一个像素用一个字节来表示 , 在 0x00RRGGBB 的颜色格式中它只能表示蓝色 , 所以在 LCD 上显示出来的文字是蓝色的:
爱笑的姑娘|使用 freetype 显示单个文字4. 编译
编译命令(如果你使用的交叉编译链前缀不是 arm-buildroot-linux-gnueabihf , 请自行修改命令):
$ arm-buildroot-linux-gnueabihf-gcc -o freetype_show_font freetype_show_font.c -lfreetype它会提示如下错误:
freetype_show_font.c:12:10: fatal error: ft2build.h: No such file or directory#include ^~~~~~~~~~~~compilation terminated.我们不是已经编译过 freetype 并且把头文件复制进工具链里了吗?怎么还有这个错误?
我们编译出 freetype 后 , 得到的 ft2build.h 是位于 freetype2 目录里 , 我们把整个 freetype2 目录
复制进了工具链里 。
但是包括头文件时 , 用的是“#include ” , 要么改成:
#include 要么把工具链里 incldue/freetype2/*.h 复制到上一级目录 , 我们使用这种方法:跟 freetype 文档保持一致 。 执行以下命令:
book@PC$ cd /home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/includebook@PC$ mv freetype2/* ./然后再次执行以下命令:
$ arm-buildroot-linux-gnueabihf-gcc -o freetype_show_font freetype_show_font.c -lfreetype5. 上机
将编译好的 freetype_show_font 文件与 simsun.ttc 字体文件拷贝至开发板 , 这 2 个文件放在同一个目录下 , 然后执行以下命令 。
[root@board:~]# ./freetype_show_font ./simsun.ttc 或[root@board:~]# ./freetype_show_font ./simsun.ttc 300如果实验成功 , 我们将在屏幕中间看到一个蓝色的“繁”字 。
4、在 LCD 上令矢量字体旋转某个角度使用 GIT 下载所有源码后 , 本节源码位于如下目录:
01_all_series_quickstart\04_嵌入式 Linux 应用开发基础知识\source\10_freetype\03_freetype_show_font_angle\freetype_show_font_angle.c


推荐阅读