矢量字体字形分布图
origin是字形显示开始的地方,下一个字体开始的位置是:origin + advance的位置,即是指定了下一个字符的origin出现的位置。advance有x方向的,当然有y方向的,不过这里没有使用,使用y方向将会使字体倾斜。
虽然有坐标基准线,但是英文字体不像汉字方方正正,如果把所有英文字体搞得像汉字一样,那么会很不好看,所以即使在已经订好基准线后,还是会另外设置字体的xmin、xmax和ymin、ymax这四个参数。
Freetype API的使用
我们来总结一下显示一个矢量字符我们都做了什么:
1、初始化一个库
2、加载字体,并用创建一个face来描述字体
3、设置字体的像素大小
4、设置字体的旋转角度以及显示位置
5、找到字型的点阵信息并记录下来
6、显示点阵
要得到上图的信息,我们需要将从face将glyph给取出来,得到box的一些数据,主要是坐标的XY最大、最小值。
首先,从face中拿到放入字体插槽里面的glyph(此操作并不影响origin glyph)。(函数API名 Extracting the glyph image)
error = FT_Get_Glyph( face->glyph, &glyph );
然后再拿出box里面的数据。(函数API名 Measuring the glyph image)
FT_Glyph_Get_CBox(glyph, FT_GLYPH_BBOX_TRUNCATE, &bbox );
一些API函数:
①:FT_Init_FreeType( &library );
功能:这是初始化一个库,所谓库我们可以简单的理解为一个空间,用来存放所有的资源。
②:FT_New_Face( library, argv[1], 0, &face );
功能:读取字体文件中指定类型的字体,并用face来描述它
参数1:表示库
参数2:要打开的文件
参数3:表示要加载的字体的类型,0表示任何类型都可以
参数4:face
一个文件里面可能会含有多种字体,每个字体对应着一个face,也就是说face用来描述某一种字体。
③:FT_Set_Pixel_Sizes(face, 24, 0);
功能:设置字符的像素大小
参数1:face
参数2:每行多少像素,0表示与列相同
参数3:每列多少像素,0表示与行相同
④:FT_Set_Transform( face, &matrix, &pen );
功能:设置传输
参数1:face
参数2:用于设置字体的旋转角度
参数3:用于设置字体的平显示位置,freetype文档里面的参数提示给的delta,也就是数学里面△符号,即然后把它显示到LCD中间位置,但是“我爱你”三个字符之间位置没发生改变,那么坐标(0,0)和(pen.x, pen.y)之间的位置就是delta。
⑤:FT_Load_Char( face, text[n], FT_LOAD_RENDER );
功能:将一个字型的点阵信息记录在face->glyph中
参数1:face
参数2:要记录的字型的编码
参数3:参数
⑥:draw_bitmap( &slot->bitmap , slot->bitmap_left , target_height - slot->bitmap_top );
功能:将字符的点阵存放在一个结构体里面
参数1:用于描述点阵信息的结构体
参数2:x坐标
参数3:y坐标
注意:我们这里的坐标是笛卡尔坐标系,也就是y坐标向上,x坐标向右!而在LCD上的显示坐标系y轴是反向的,所以显示的时候需要将y轴处理一下!
本文标题:矢量字体字形分布图
文章作者:小师
发布时间:2016-06-28
最后更新:2022-05-04
原始链接:chunlife.top/2016/06/28/矢量字体字形分布图/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可