Предотвращение сглаживания (или подпиксельной визуализации) шрифта TrueType

Так выражается шрифт .ttf:

Как визуализируется шрифт

Я создал этот векторный шрифт TrueType, используя FontForge. Я хочу использовать этот шрифт для приложений, для которых требуются векторные глифы, и не поддерживает загрузку встроенных растровых изображений .ttf(которые, похоже, не имеют этой проблемы).

В некоторых цветовых схемах этот подпиксельный рендеринг, который делает Windows, делает шрифт совершенно нечитаемым. Этот эффект присутствует в большинстве шрифтов ttf, но намного сильнее на шрифтах с пиксельными совершенными краями, такими как мои.

Кто-нибудь знает какие-либо программируемые намеки или настройки шрифта, которые позволят шрифту визуализировать пиксель идеально, а не с этим красно-синим ореолом? Я хотел бы, чтобы шрифт работал правильно без изменений ОС, чтобы отключить ClearType или аналогичный.

Чтобы прояснить, это вопрос об использовании набора инструкций TrueType или изменении параметра шрифта TrueType (а не параметра System/Application), который я, возможно, неправильно использовал, чтобы сделать визуализацию шрифта разборчиво (если возможно).

Ответ 1

Рабочее решение

Кредит отправляется Брайану Никсону для размещения URL-адреса решения и Эрик Олофссон для исследования и публикации решения в своем блоге.

Эрик Олофссон предлагает решение, которое заставляет API шрифтов Windows определять приоритеты встроенных растровых изображений .ttf, которые будут использоваться с приоритетом над глифами при рендеринге.

Решение можно найти подробно на http://www.electronicdissonance.com/2010/01/raster-fonts-in-visual-studio-2010.html


Резюме решения

  • Добавьте кодовую страницу "Традиционный китайский" в таблицу Panpose OS/2.
  • Используйте кодировку ISO 106046-1 (Unicode, UCS-2).
  • Включить глифы для следующих, казалось бы, случайных символов Хираганы:
    • い - U + 3044
    • う - U + 3046
    • か - U + 304B
    • ひ - U + 3057
    • の - U + 306E
    • ん - U + 3093

Этот список не шутка

Ответ 2

В некоторых цветовых схемах этот подпиксельный рендеринг, который делает Windows, делает шрифт совершенно нечитаемым.

Звучит так, как будто ClearType неправильно откалиброван.

Экран "Pixel-perfect" возможен только тогда, когда цвет текста соответствует цветовой плоскости дисплея. Для текста с черным или полутоновым оттенком это означает полутоновый дисплей (например, высокопроизводительные и дорогие цифровые монохромные дисплеи популярны в области медицинской визуализации).

В противном случае вы столкнетесь с фундаментальным фактом, что цветовые компоненты физически разделены на дисплее. Концепция ClearType заключается в настройке изображения для компенсации фактического физического смещения между цветными плоскостями.

Печатные носители с высокоточной регистрацией являются наиболее близкими к нескольким цветным плоскостям без какого-либо смещения.

Теперь все же имеет смысл отключить ClearType в некоторых случаях - когда изображение предназначено для сохранения в файле, а не на локальном дисплее, отключив ClearType, можно получить результаты, которые могут быть разборчивы в более широком диапазоне отображает и также сжимает лучше. (Но для достижения наилучших результатов отправляйте векторы и позвольте конечному пользователю компенсировать свою конкретную субпиксельную структуру)

В GDI управление ClearType устанавливается через структуру LOGFONT, в которой используются функции текстового рисования команд, которые используют семейство, размер и атрибуты шрифта. В GDI + используйте SetTextRenderingHint для экземпляра Graphics.

Поскольку использование ClearType устанавливается приложением одновременно с размером, весом и другими атрибутами, ваш шрифт подлежит запросам как с, так и без него. Однако ClearType несовместим со всеми шрифтами, вызывая несовместимость, вы избегаете ClearType только для вашего шрифта.

В документации LOGFONT есть следующие замечания о ClearType:

Следующие ситуации не поддерживают сглаживание ClearType:

  • Текст отображается на принтере.
  • Дисплей установлен на 256 цветов или меньше.
  • Текст передается клиенту терминального сервера.
  • Шрифт не является шрифтом TrueType или шрифтом OpenType с контурами TrueType. Например, следующее не поддерживает антиалиасизацию ClearType: шрифты Type 1, шрифты Postscript OpenType без контуров TrueType, растровые шрифты, векторные шрифты и шрифты устройства.
  • Шрифт настроил встроенные растровые изображения для любых размеров шрифтов, содержащих встроенные растровые изображения. Например, это обычно происходит в восточно-азиатских шрифтах.

Кроме того, таблица gasp в формате TTF имеет несколько полей, которые влияют на использование ClearType.

введите описание изображения здесь

Документация на https://www.microsoft.com/typography/otspec/gasp.htm и https://fontforge.github.io/fontinfo.html#gasp

И, конечно же, убедитесь, что бит "оптимизирован для ClearType" в таблице head не установлен.