【问题标题】:Initial pen position in freetype?freetype中的初始笔位置?
【发布时间】:2020-07-20 07:10:10
【问题描述】:

在用 freetype 画出字形后,笔前进如下:

pen.x += face->glyph->advance.x;
pen.y += face->glyph->advance.y;

我的问题是,如何设置第一个字符的初始笔位置,相对于绘图表面的左上边界?

{0,0} 不正确,因为它会将第一条线大部分绘制在绘图表面的顶部上方,并且太靠近左边界。

我怀疑是以下几种情况的组合:

struct FT_FaceRec {
  ...
  FT_BBox           bbox;

  FT_UShort         units_per_EM;
  FT_Short          ascender;
  FT_Short          descender;
  FT_Short          height;

  FT_Short          max_advance_width;
  FT_Short          max_advance_height;
  ...
}

但不是很清楚。

【问题讨论】:

  • 您打算使用very tall font 吗?如果第一个字符突出到左边——比如说,斜体小写f——你想把它移到右边让它完全可见吗?总是相同的字体和大小?这是用于交互式输入还是静态文本?在确定 y 偏移量时,您是否需要考虑重音?在首都?包括越南语(多种口音)?包括zalgo文本? (... lotsa 堆叠的口音..)

标签: fonts truetype freetype freetype2


【解决方案1】:

为了记录,我最终将其用作初始笔位置:

笔.x = 0; pen.y = -face->size->metrics.ascender;

这似乎是第一个字形原点左上角的适当最小边框。

进一步,使用 face->size->metrics.descender 越过最后一个基线(最后一个字形的原点)作为底部边框。并在前进 (+= .advance.x) 越过最右侧字形的原点后使用 x 笔位置作为最小的右侧边框。

【讨论】:

    猜你喜欢
    • 2010-12-11
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    相关资源
    最近更新 更多