【问题标题】:CGFont: calculation glyphs boundsCGFont:计算字形边界
【发布时间】:2011-04-18 11:48:12
【问题描述】:

如何获取字符串中每个字形的大小(以像素为单位)? 我使用 CGFontGetGlyphBBoxes 来获取字符串中每个字形的边界框并获取以下值:

2011-04-18 15:34:56.809 TextSize[3604:207] bbox['d'] = {{56, -38}, {949, 1512}}
2011-04-18 15:34:56.811 TextSize[3604:207] bbox['e'] = {{72, -38}, {978, 1135}}
2011-04-18 15:34:56.811 TextSize[3604:207] bbox['m'] = {{132, 0}, {1441, 1095}}
2011-04-18 15:34:56.812 TextSize[3604:207] bbox['o'] = {{59, -39}, {998, 1141}}

如果我正确理解以字体单位表示的这些值。这些值究竟意味着什么,我如何将其转换为像素? CGFontGetGlyphAdvances 和 CGFontGetGlyphBBoxes 返回的值有什么区别?使用 CGFontGetGlyphAdvances 我得到以下信息:

2011-04-18 15:34:56.809 TextSize[3604:207] advance['d'] = 1139, bbox = {{56, -38}, {949, 1512}}
2011-04-18 15:34:56.811 TextSize[3604:207] advance['e'] = 1139, bbox = {{72, -38}, {978, 1135}}
2011-04-18 15:34:56.811 TextSize[3604:207] advance['m'] = 1706, bbox = {{132, 0}, {1441, 1095}}
2011-04-18 15:34:56.812 TextSize[3604:207] advance['o'] = 1139, bbox = {{59, -39}, {998, 1141}}

例如,如果我想计算字符串的整个宽度(在我的例子中是 'demo'),我应该使用什么值(bbox.size.width 或 Advance)?

【问题讨论】:

    标签: cocoa-touch fonts core-graphics bounding-box glyph


    【解决方案1】:

    对我有用的是将每个字形的高级值相加。我认为边界框不会包含字形之间的适当间距。

    您可以通过调用获取将Advance转换为em的值:

    CGFontGetUnitsPerEm(cgfont);
    

    从中可以通过乘以字体大小来获得像素。但请持保留态度,因为我不完全确定这是否适用于所有可能的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 2017-02-21
      • 2016-06-10
      • 2019-08-11
      相关资源
      最近更新 更多