Как на самом деле работает рендеринг шрифтов?

11

Я понимаю, что ничего не знаю о том, как шрифты отображаются на моем компьютере.

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

Что я понял из вышесказанного, так это то, что, вероятно, все приложения, которые нуждаются в рендеринге шрифтов, используют какую-либо библиотеку для ОС (или DE).

С другой стороны, браузеры обычно управляют своим собственным рендерингом через механизм рендеринга, который заботится о расположении различных элементов, включая текст, в соответствии с определенными правилами потока.

Я не уверен, насколько эти два факта совместимы. Я бы предположил, что браузер должен будет попросить ОС нарисовать глиф в заданной позиции, но как он может управлять потоком текста, не зная заранее, сколько места займет глиф? Существуют ли отдельные вызовы для определения размеров глифов, чтобы браузер мог управлять потоком, как если бы символы были небольшими прямоугольниками, которые позже заполняются ОС? (Хотя об этом не заботится кернинг). Или ОС отвечает за рисование всей текстовой области, включая текстовый поток? Возвращает ли ОС визуализированный глиф как растровое изображение и оставляет его приложению, чтобы нарисовать его на экране?

Andrea
источник
1
Краткий ответ - да".
Грэм Борланд
@GrahamBorland ...: - / Какой из трех вариантов, которые я изобразил, является ответом "да"?
Андреа
Все они в зависимости от обстоятельств. Я постараюсь составить правильный ответ.
Грэм Борланд

Ответы:

9

Вы правы в том, что, как правило, приложения используют библиотеки, предоставляемые ОС или инструментарием GUI, для визуализации шрифтов.

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

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

(Возможен промежуточный сценарий, когда движок может принимать параметр максимальной ширины и, возможно, некоторые параметры кернинга / заполнения, и автоматически отображать столько текста, сколько может уместить.)

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

Грэм Борланд
источник