上述代码会加载字符失败
代码跟踪发现 /* if FT_LOAD_NO_SCALE is not set, `ttmetrics' must be valid */
必须要加上FT_Set_Char_Size函数,并且第二个第三个参数要是64的倍数
FreeType 2使用大小对象来模拟与给定字符大小有关的所有信息。例如,size对象保存某些指标的值,例如x_ppem和y_ppem,它们都以像素表示,以及升序、文本高度和最大水平推进,它们都以1/64像素表示(但是,这些值被四舍五入为整数,即64的倍数)。
当调用FT_New_Face函数(或其兄弟函数之一)时,它会自动为返回的脸创建一个新的size对象。这个size对象可以通过face - >size直接访问。
注意:单个face对象可以同时处理一个或多个大小对象;然而,很少有程序员真正需要这样做。因此,我们决定通过附加功能提供此功能。
当创建一个新的face对象时,所有元素在初始化期间被设置为0。要用合理的值填充结构,应该调用FT_Set_Char_Size。下面是一个示例,将300×300dpi设备的字符大小设置为16pt:
error = FT_Set_Char_Size( face, /* handle to face object */ 0, /* char_width in 1/64 of points */ 16*64, /* char_height in 1/64 of points */ 300, /* horizontal device resolution */ 300 ); /* vertical device resolution */
Notes:
字符的宽度和高度以1/64点指定。点是物理距离,等于1/72英寸。通常,它不等于一个像素。
字符宽度值为0表示“与字符高度相同”,字符高度值为0表示“与字符宽度相同”。否则,可以指定不同的字符宽度和高度。
水平和垂直设备的分辨率用点每英寸(dpi)表示。对于屏幕等显示设备,标准值是72或96 dpi。分辨率用于从字符点大小计算字符像素大小。
水平分辨率值为0表示“与垂直分辨率相同”,垂直分辨率值为0表示“与水平分辨率相同”。如果两个值都为零,则两个维度都使用72dpi。
第一个参数是face对象的句柄,而不是size对象。
这个函数计算对应于字符宽度、高度和设备分辨率的字符像素大小(可能是小数)。像素大小的一个常见缩写是pem(像素每em)。