Проблема с толщиной шрифта после изменения BaseSDK с 10,5 до 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]
но выглядит не намного лучше...
Заранее спасибо.
3 ответа
Теперь я знаю причину, по которой это происходит, и решение этой проблемы: Кажется, что с 10.6 был добавлен параметр сглаживания шрифтов LCD, который включен в Предпочтения -> Внешний вид -> "Использовать сглаживание шрифтов LCD, когда доступно" в качестве флажка, который отмечен дефолт.
Вот почему после изменения BaseSDK проекта на 10.6 тексты в приложении стали сглаживаться в стиле LCD и выглядели совсем плохо.
Таким образом, исправление проблемы в коде заключается в изменении параметров сглаживания в графическом контексте перед нашими чертежами:
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetShouldSmoothFonts(context, NO);
Документация по этому методу говорит нам, что этот параметр является частью графического состояния, поэтому, если вы не хотите изменять этот параметр на других чертежах шрифта, вам следует восстановить графическое состояние.
Спасибо @NSGod за нахождение причины этой проблемы.
Если мы увеличим и посмотрим на оба изображения, мы заметим немедленную разницу (по крайней мере, я это делаю):
Текст на верхнем изображении использует сглаживание шрифтов в стиле CRT, в то время как текст на нижнем изображении использует сглаживание шрифтов в среднем LCD-стиле. (Все 3 стиля сглаживания шрифтов на ЖК-дисплее будут представлять цветовые оттенки в сглаженных пикселях).
Нам нужно больше информации о вашей настройке тестирования, чтобы иметь возможность сказать, почему это происходит. В какой версии OS X вы тестируете это? Например, было ли ваше приложение построено на основе SDK 10.6 с целью развертывания 10,5, верхнее изображение было получено во время тестирования под OS X 10.5.x (на той же машине), а нижнее изображение было получено во время тестирования под 10.6.x? Или все тестирование проводилось в Mac OS X 10.6.x, и сборка с использованием SDK 10.5 приводила к верхнему изображению, а сборка с использованием SDK 10.6 приводила к нижнему изображению? Какую модель Mac вы используете? Какой тип внешних LCD или CRT дисплеев вы подключили, если таковые имеются?
Просто пара идей без информации, запрашиваемой выше. Я полагаю, что стиль сглаживания шрифтов по умолчанию - CRT в 10.5, а по умолчанию в 10.6 - "автоматический". Итак, если у вас есть система с ЖК-дисплеем, и вы тестировали под 10.5, но никогда не меняли стиль сглаживания шрифтов по сравнению со стилем CRT по умолчанию, то вы получите изображение, подобное верхнему. Если вы затем переключились на 10.6 в той же системе, возможно, что автоматическое сглаживание шрифтов 10.6 автоматически обнаружило ваш ЖК-дисплей и использовало сглаживание шрифтов в среднем ЖК-стиле, что привело бы к "более тяжелому" виду текста на нижнем изображении.,
Следует также помнить, что значение сглаживания шрифта хранится отдельно для каждого хоста. Например, на моей машине AppleFontSmoothing
значение хранится в ~/Library/Preferences/ByHost/.GlobalPreferences.##########.plist, где ########## - это аппаратный UUID. Я полагаю, возможно, что для разных настроек хоста могут храниться 2 разных значения.
Вы получаете то, что просите
[NSFont systemFontOfSize:18]
Скорее всего, они слегка различаются между 10,5 и 10,6. Графический дизайнер сошел с ума по любой причине.
Что вы получаете, если вы регистрируете вывод [NSFont systemFontOfSize:18]
, Это отличается от 10,5 до 10,6?