我试图使用核心文字功能使用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
,它以像素为单位的坐标用于字形放置。
我还想使用核心图形函数CGContextMoveToPoint
,CGContextAddLineToPoint
来绘制附加到音符字形的词干。
我有点不清楚如何从em单位分数的坐标转到特定点大小的字形的特定坐标(以像素为单位),以便我可以准确地将这些词干放到音符字形上。
我希望我的问题清楚明了。
感谢您的帮助
答案 0 :(得分:2)
如果没有文本转换矩阵(CGContextSetTextMatrix
),则1 em将与字体大小的点数相同。因此,对于具有默认标识文本矩阵的12磅字体,1 em = 12 pt。
请注意,Core Graphics中几乎没有以像素为单位。它们是点(核心图形点,而不是PostScript点)。对于视网膜显示器,1个点包含4个像素(2x2)。这可能就是你的意思,但如果你与图像互动,点/像素转换非常重要。
(我觉得我已经重复了你已经知道的东西;还有更多问题吗?从给定的原点,你可以通过将em单位偏移乘以字体大小来计算坐标。)