True Type Font Scaling - PullRequest
       6

True Type Font Scaling

0 голосов
/ 07 сентября 2018

В статье шрифтов MSI TrueType (https://docs.microsoft.com/en-us/typography/opentype/otspec160/ttch01) приведено следующее для преобразования FUnits в пиксели:

Значения в квадрате em преобразуются в значения в системе координат пикселей путем умножения их на шкалу. Эта шкала:

pointSize * разрешение / (72 точки на дюйм * units_per_em)

где pointSize - это размер, при котором должен отображаться глиф, а разрешение - это разрешение устройства вывода. 72 в знаменателе отражает количество точек на дюйм.

Например, предположим, что длина символа глифа составляет 550 FUnits на экране с разрешением 72 точки на дюйм в 18 точках. Есть 2048 единиц на каждого. Следующий расчет показывает, что длина этой функции составляет 4,83 пикселя.

550 * 18 * 72 / (72 * 2048) = 4,83

Вопросы:

  1. Там написано, что "pointSize - это размер, при котором должен отображаться глиф". Как это вычислить, и в каких единицах он находится?
  2. Там написано "разрешение - это разрешение устройства вывода". Это в DPI? Где мне взять эту информацию?
  3. Там написано: «72 в знаменателе отражает количество точек на дюйм». Это связано с DPI или нет?
  4. В этом примере написано «18 баллов». Используется ли это 18 при вычислении разрешения или pointSize?

К сожалению, документация Apple более или менее такая же, и кроме этого, есть только какие-то ресурсы, кроме простого чтения исходного кода stb_truetype.

1 Ответ

0 голосов
/ 07 сентября 2018

Там написано: "pointSize - это размер, при котором должен отображаться глиф". Как это вычислить, и в каких единицах он находится?

Вы не вычисляете размер точки, вы устанавливаете его. Это номинальный размер, в котором вы хотите, чтобы шрифт отображался (например, меню шрифтов в текстовом редакторе). «Размер точки» - это традиционная типографская система измерения, где «точка» составляет примерно 1/72 дюйма. Это приводит другой вопрос:

Там написано: «72 в знаменателе отражает количество точек на дюйм». Это связано с DPI или нет?

Нет. Опять же, это типографские точки - та же единица, с которой вы устанавливаете размер точки. Вот почему это, в первую очередь, часть знаменателя: размер точки выражается в системе измерений 72 точки на дюйм, и это нужно каким-то образом учитывать в уравнении.

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

В этом примере написано «18 баллов». Используется ли это 18 при вычислении разрешения или pointSize?

Ни. Это это размер точки; смотри выше. Весь пример можно перевести следующим образом. С шрифтом, основанным на 2048 единицах на em, если конкретная функция глифа имеет длину 550 em единиц, и глиф отображается размером 18 точек (то есть 18/72 дюйма) на устройстве с разрешением экрана 72 пикселей на дюйм, размер пикселя этой функции будет 4,84.

Там написано "разрешение - это разрешение устройства вывода". Это в DPI? Где мне взять эту информацию?

Это DPI / PPI, да. Вам нужно запросить какой-либо системный API для этой информации или просто жестко указать значение, если вы нацеливаетесь на конкретное устройство.

...