Проблема с толщиной шрифта после изменения BaseSDK с 10,5 до 10,6 - PullRequest
1 голос
/ 12 мая 2011

После изменения BaseSDK моего проекта на 10.6 я заметил, что мой нарисованный текст выглядит иначе (посмотрите на изображения: тот же код для рисования)

Под 10.5 BaseSDK: image1

Менее 10,6 BaseSDK: image2

Я рисую с [(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 ]

1 голос
/ 12 мая 2011

Если мы увеличим и внимательно посмотрим на оба изображения, мы заметим немедленную разницу (по крайней мере, у меня):

enter image description here

Текст на верхнем изображении использует сглаживание шрифтов в стиле CRT, в то время как текст на нижнем изображении использует сглаживание шрифтов в стиле среднего ЖК-дисплея. (Все 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 вы используете? Какой тип внешних ЖК-дисплеев или ЭЛТ-мониторов вы подключили, если таковые имеются?

Просто пара идей, без информации, запрашиваемой выше. Я полагаю, что стиль сглаживания шрифтов по умолчанию - CRT в 10.5, а по умолчанию в 10.6 - «автоматический». Итак, если у вас есть система с ЖК-дисплеем, и вы тестировали под 10.5, но никогда не меняли стиль сглаживания шрифтов по сравнению со стилем CRT по умолчанию, то вы получите изображение, подобное верхнему. Если вы затем переключились на 10.6 в той же системе, возможно, что автоматическое сглаживание шрифтов 10.6 автоматически обнаружило ваш ЖК-дисплей и использовало сглаживание шрифтов в среднем ЖК-стиле, что привело бы к «более тяжелому» виду текста на нижнем изображении. .

Еще одна вещь, которую нужно иметь в виду, это то, что значение сглаживания шрифта хранится отдельно для каждого хоста. Например, на моем компьютере значение AppleFontSmoothing хранится в ~ / Library / Preferences / ByHost / .GlobalPreferences. ##########. Plist, где ######### # это ваш аппаратный UUID. Я полагаю, возможно, что для разных настроек хоста могут храниться 2 разных значения.

1 голос
/ 13 мая 2011

Теперь я знаю причину, по которой это происходит, и решение этой проблемы: Похоже, что с 10.6 была добавлена ​​опция сглаживания шрифтов на ЖК-дисплее, которая включена в Предпочтения -> Внешний вид -> «Использовать сглаживание шрифтов на ЖК-дисплее, когда доступно» в качестве флажка, который установлен по умолчанию.

Именно поэтому после изменения BaseSDK проекта на 10.6 тексты в приложении стали сглаженными и выглядят плохо, как ЖК-стиль.

Итак, исправление проблемы в коде заключается в изменении параметров сглаживания в графическом контексте перед нашими чертежами:

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

Документация этого метода говорит нам, что этот параметр является частью графического состояния, поэтому, если вы не хотите изменять эту опцию на других чертежах шрифта, вам следует восстановить графическое состояние.

Спасибо @NSGod за поиск причины этой проблемы.

0 голосов
/ 12 мая 2011

Вы получаете то, что просите

[NSFont systemFontOfSize:18]

Скорее всего, они слегка различаются между 10,5 и 10,6. Графический дизайнер по какой-то причине сошел с ума.

Что вы получите, если зарегистрировать вывод [NSFont systemFontOfSize:18]. Различается ли между 10,5 и 10,6?

...