在FreeType中设置字符大小

10

我有些困惑设置字符大小对象的字符宽度和高度字段(例如在FreeType教程中描述的示例)。

error = FT_Set_Char_Size(
          face,    /* handle to face object           */
          0,       /* char_width in 1/64th of points  */
          16*64,   /* char_height in 1/64th of points */
          300,     /* horizontal device resolution    */
          300 );   /* vertical device resolution      */

为什么要指定 char_widthchar_height?这不应该取决于实际字形吗?例如,字符"w"和"l"具有不同的宽度和高度。

另外,由于我不是在屏幕上呈现(我计划将光栅字体数据用于其他奇特的目的),使用 FT_Set_Pixel_Sizes 是否足够?

1个回答

9

函数FT_Set_Char_Size和FT_Set_Pixel_Sizes设置字体的大小,不是单个字符的大小,而是字体的em方框的大小。这个方框是一个概念性的正方形,可以和最高的字符(例如方括号“[”)一样高,但实际上可能不与任何字符具有相同的高度;它仅定义一个参考尺寸。设置12pt大小的主要意义是创建通常适合于间距为12pt的基线上不冲突,并与其他字体的12pt字符协调的字符。因此,“em”是表示字体大小的排版尺寸。

高度和宽度可以分别设置,这样您就可以通过使用比高度更大或更小的宽度来创建扩展(水平放大)或压缩(水平压缩)字体。通常,您将宽度保留为零,这意味着em正方形的宽度与高度相同,并且字符将按其标准比例创建,而不会被拉伸或收缩。
除了FT_Set_Pixel_Sizes不允许使用有意义的分数像素(在创建抗锯齿字形时有用)之外,没有理由使用FT_Set_Char_Size而不是FT_Set_Pixel_Sizes。最终结果总是使用em大小和显示分辨率计算的。
在您的情况下,您可能会使用FT_Set_Pixel_Sizes;但是,如果您需要分数像素大小,请使用高度为64分之一像素,宽度为零,水平和垂直设备分辨率均为零的FT_Set_Char_Sizes;分辨率为0使像素与点大小相同。因此,要获得11.5像素大小的像素大小,您将使用:
FT_Set_Char_Sizes(face,0,11 * 64 + 32,0,0);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接