CGFont:计算字形边界
问题描述:
如何获取像素中字符串的每个字形的大小? 我用CGFontGetGlyphBBoxes得到字符串每个字形的边界框,并得到以下值:CGFont:计算字形边界
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}}
举例来说,如果我想计算字符串的整个宽度(在我的情况“演示”),我应该用什么样的价值观(bbox.size.width或提前) ?
答
对我来说有效的是为每个字形加上先行值。我不认为边界框会在字形之间包含适当的间距。
您可以通过调用获得对提前转换为EM值:
CGFontGetUnitsPerEm(cgfont);
从,你可以通过与字体大小相乘得到的像素。不过,我们不能完全确定这是否能在所有可能的情况下发挥作用。