核心文本字形放置和em值

时间:2013-12-12 14:06:39

标签: cocoa core-text em glyph

我试图使用核心文字功能使用http://blog.steinberg.net/2013/05/introducing-bravura-music-font/中的Bravura字体绘制一些音符。

伴随此字体的元数据json文件在em单位分数中具有“附加”坐标,其中词干应附加到某些音符。此附着点再次相对于注释字形周围的边界框,其尺寸为em单位的分数。

我粗略的ASCII图片显示了词干与音符的连接点:

      |
      |
      |
 /---\* <- attach point here
|     |
 \---/

来自维基百科: “em是排版领域的宽度单位,等于当前指定的点大小。例如,16点字体中的一个em是16点宽。因此,对于所有字体,此单位是相同的。给定点大小。“

我想使用Core Text函数CTFontDrawGlyphs,它以像素为单位的坐标用于字形放置。

我还想使用核心图形函数CGContextMoveToPointCGContextAddLineToPoint来绘制附加到音符字形的词干。

我有点不清楚如何从em单位分数的坐标转到特定点大小的字形的特定坐标(以像素为单位),以便我可以准确地将这些词干放到音符字形上。

我希望我的问题清楚明了。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

如果没有文本转换矩阵(CGContextSetTextMatrix),则1 em将与字体大小的点数相同。因此,对于具有默认标识文本矩阵的12磅字体,1 em = 12 pt。

请注意,Core Graphics中几乎没有以像素为单位。它们是点(核心图形点,而不是PostScript点)。对于视网膜显示器,1个点包含4个像素(2x2)。这可能就是你的意思,但如果你与图像互动,点/像素转换非常重要。

(我觉得我已经重复了你已经知道的东西;还有更多问题吗?从给定的原点,你可以通过将em单位偏移乘以字体大小来计算坐标。)