我正在尝试以某种精度在特定点渲染字体字形,并且遇到了很多麻烦。
首先,文本位置 Y 值永远不会改变,所以我根本无法获得字形的高度。例如,在以下代码中,断言总是触发:
CGContextSelectFont(g, "Arial", 32.0f, kCGEncodingFontSpecific);
char c = 'A';
CGPoint pt = CGPointMake(400, 400);
CGContextSetTextDrawingMode(g, kCGTextInvisible);
CGContextSetTextPosition(g, pt.x, pt.y);
CGContextShowText(g, &c, 1);
CGPoint pt2 = CGContextGetTextPosition(g);
assert(pt2.y != pt.y);
假设字形线性缩放,我尝试使用一些硬编码的宽高比来解决这个问题。请注意,文本位置的 X 值已正确更新。
然而,更重要的是字形相对于文本位置的呈现方式;一些字形使用 Y 值作为字形的中心进行渲染,一些使用 Y 值作为字形的顶部,还有一些使用 Y 值作为字形的底部。我无法对所有这些数据进行硬编码,并希望在今年的任何时候都能完成我的应用程序。
在上面的绘图代码中有什么我做错了吗?我在 Quartz 文档中找不到任何与垂直对齐相关的参考资料,我有点迷茫。