2

将我的项目的 BaseSDK 更改为 10.6 后,我注意到我的自定义绘制文本看起来不同(查看图像:相同的绘图代码)

在 10.5 BaseSDK 下: 图像1

在 10.6 BaseSDK 下: 图2

我正在用 [(NSString *)myString drawInRect:myRect withAttributes:myAttributes] 绘图。

myAttributes = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
    [NSColor myColor], NSForegroundColorAttributeName,
    [NSFont systemFontOfSize:18], NSFontAttributeName,
    paragraphStyle, NSParagraphStyleAttributeName,
    shadow, NSShadowAttributeName, nil];

这种差异的原因是什么,或者只是如何减少字体的粗细?我试图通过减少厚度

[NSFontManager convertWeight:NO ofFont:font]

但看起来也好不了多少……

提前致谢。

4

3 回答 3

2

如果我们放大并仔细观察这两个图像,我们会立即注意到差异(至少我是这样):

在此处输入图像描述

上图中的文本使用 CRT 风格的字体平滑,而下图中的文本使用 Medium LCD 风格的字体平滑。(所有 3 种 LCD 字体平滑样式都会在抗锯齿像素中引入色偏)。

我们需要有关您的测试设置的更多信息,以便能够说明发生这种情况的原因。你在什么版本的 OS X 下测试这个?例如,您的应用程序是针对 10.6 SDK 构建的,部署目标为 10.5,上图是在 OS X 10.5.x(在同一台机器上)下测试时拍摄的,下图是在 10.6.x 下测试时拍摄的? 或者,是否所有测试都是在 Mac OS X 10.6.x 中完成的,针对 10.5 SDK 构建会产生上图,而针对 10.6 SDK 构建会产生下图?你用的是什么型号的Mac?如果有的话,你连接了什么类型的外部 LCD 或 CRT 显示器?

只是几个想法,没有上面要求的信息。我相信,默认字体平滑样式是 10.5 中的 CRT,而 10.6 默认为“自动”。因此,如果您有一个带 LCD 显示器的系统并且在 10.5 下进行测试,但从未更改过默认 CRT 样式的字体平滑样式,那么您会得到与上图类似的图像。如果您随后在同一系统上切换到 10.6,则 10.6 自动字体平滑可能会自动检测您的 LCD 显示器,并使用中等 LCD 样式的字体平滑,这会导致下图中的“看起来更重”的文本.

要记住的另一件事是字体平滑值是按主机存储的。例如,在我的机器上,该AppleFontSmoothing值存储在 ~/Library/Preferences/ByHost/.GlobalPreferences.##########.plist 中,其中 ########## 是您的硬件 UUID。我想可能会为不同的主机设置存储 2 个不同的值。

于 2011-05-12T17:28:38.663 回答
2

现在我知道它发生的原因以及此问题的解决方法:似乎在 10.6 中添加了字体 LCD 平滑选项,该选项在首选项-> 外观->“可用时使用 LCD 字体平滑”作为复选框被选中默认。

这就是为什么将项目的BaseSDK更改为10.6后,应用程序中的文本变得像LCD一样平滑,看起来很糟糕。

因此,代码中问题的解决方法是在绘图之前更改图形上下文中的平滑选项:

CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetShouldSmoothFonts(context, NO);

这个方法的文档告诉我们这个参数是图形状态的一部分,所以如果你不想在其他字体绘图中改变这个选项,你应该恢复图形状态。

感谢@NSGod 找到了这个问题的原因。

于 2011-05-13T16:28:57.220 回答
0

你得到你想要的

[NSFont systemFontOfSize:18]

它们很可能是介于 10.5 和 10.6 之间的细微不同的字体。无论出于何种原因,平面设计师都发疯了。

如果您记录[NSFont systemFontOfSize:18]. 10.5和10.6有区别吗?

于 2011-05-12T14:37:23.233 回答