1

我正在尝试以某种精度在特定点渲染字体字形,并且遇到了很多麻烦。

首先,文本位置 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 文档中找不到任何与垂直对齐相关的参考资料,我有点迷茫。

4

1 回答 1

0

据我所知,这是一项相当复杂的任务。我会查看zynga 的 LabelFont 库,要么从他们的代码中学习,要么直接使用该库。尤其是看看 ​​LabelFont 类的drawTextInRect:方法。

于 2010-02-24T09:05:02.320 回答