【问题标题】:Setting Character Size in FreeType在 FreeType 中设置字符大小
【发布时间】:2017-04-01 03:28:26
【问题描述】:

我有点困惑设置字符大小对象的字符宽度和高度字段(示例来自FreeType tutorial 中描述的)

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 是否足够?

【问题讨论】:

    标签: freetype freetype2


    【解决方案1】:

    函数 FT_Set_Char_Size 和 FT_Set_Pixel_Sizes 设置字体的大小,而不是单个字符的大小,而是 em square 的大小,这是一个可能与最高字符一样高的概念正方形(例如,方括号:' [') 但实际上可能与任何字符的高度不同;它只是定义了一个参考尺寸。设置大小为 12pt 的主要含义是创建通常适合基线 12pt 的字符而不会发生冲突,并且与其他字体的 12pt 字符协调。因此,“em”是表示字体大小的印刷尺寸。

    高度和宽度可单独设置,因此您可以使用比高度更大或更小的宽度来创建扩展(水平放大)或压缩(水平压缩)字体。通常您将宽度设置为零,这意味着 em 正方形的宽度要与高度相同,并且字符要按照标准比例创建,而不是拉伸或收缩。

    没有理由使用 FT_Set_Char_Size 而不是 FT_Set_Pixel_Sizes,因为 FT_Set_Char_Size 提供了更好的控制; FT_Set_Pixel_Sizes 不允许小数像素,这在创建抗锯齿字形时很有意义。最终结果始终使用 em 大小和显示分辨率来计算。

    在您的情况下,您不妨使用 FT_Set_Pixel_Sizes;但如果您需要小数像素大小,请使用 FT_Set_Char_Sizes,高度为像素的 64 分之一,宽度为零,水平和垂直设备分辨率为零;分辨率为 0 使像素与点大小相同。因此,要获得 11.5 的像素大小,您可以使用

    FT_Set_Char_Sizes(face,0,11 * 64 + 32,0,0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      相关资源
      最近更新 更多