簡體   English   中英

將 BaseSDK 從 10.5 更改為 10.6 后字體粗細的問題

[英]Problem with font thickness after changing BaseSDK from 10.5 to 10.6

將我的項目的 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]

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

提前致謝。

如果我們放大並仔細觀察兩個圖像,我們會立即注意到差異(至少我是這樣):

在此處輸入圖片說明

上圖文字采用CRT風格字體平滑處理,下圖文字采用Medium LCD風格字體平滑處理。 (LCD 字體平滑的所有 3 種樣式都會在抗鋸齒像素中引入色偏)。

我們需要有關您的測試設置的更多信息才能說明發生這種情況的原因。 你在什么版本的 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 個不同的值。

現在我知道它發生的原因以及這個問題的解決方法:似乎在 10.6 中添加了字體 LCD 平滑選項,該選項在首選項 -> 外觀 ->“可用時使用 LCD 字體平滑”作為復選框被選中默認。

這就是為什么將項目的BaseSDK 更改為10.6 后,應用程序中的文本變得像LCD 一樣平滑,而且看起來很糟糕。

因此,代碼中問題的解決方法是在繪圖之前更改圖形上下文中的平滑選項:

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

這個方法的文檔告訴我們這個參數是圖形狀態的一部分,所以如果你不想在其他字體繪圖中改變這個選項,你應該恢復圖形狀態。

感謝@NSGod 找到了這個問題的原因。

你得到了你所要求的

[NSFont systemFontOfSize:18]

它們很可能是 10.5 和 10.6 之間略有不同的字體。 無論出於何種原因,平面設計師都發瘋了。

如果您記錄[NSFont systemFontOfSize:18]的輸出,您會得到什么。 10.5 和 10.6 有區別嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM