True Type字体缩放

问题描述 投票:-1回答:1

MSDN的truetype字体文章(https://docs.microsoft.com/en-us/typography/opentype/otspec160/ttch01)给出了将FUnits转换为像素的以下内容:

通过将它们乘以比例,将em方形中的值转换为像素坐标系中的值。这个规模是:

pointSize *分辨率/(每英寸72点* units_per_em)

其中pointSize是字形显示的大小,分辨率是输出设备的分辨率。分母中的72表示每英寸的点数。

例如,假设在18点的72 dpi屏幕上,字形特征的长度为550个FUnits。每个人有2048个单位。以下计算显示该特征长度为4.83像素。

550 * 18 * 72 / ( 72 * 2048 ) = 4.83

问题:

  1. 它说“pointSize是字形显示的大小。”如何计算这个,以及它是什么单位?
  2. 它说“分辨率是输出设备的分辨率”。这是DPI吗?我在哪里可以获得这些信息?
  3. 它说“分母中的72分反映了每英寸的分数。”这与DPI有关还是没有?
  4. 在示例中,它表示'18点'。这18用于计算分辨率还是pointSize?

不幸的是,Apple的文档或多或少是相同的,除此之外几乎没有任何资源,只是阅读stb_truetype的源代码。

true-type-fonts
1个回答
1
投票

它说“pointSize是字形显示的大小。”如何计算这个,以及它是什么单位?

您没有计算点大小,您可以设置它。这是您希望字体显示的标称大小(在文本编辑器中考虑字体菜单)。 “点尺寸”是传统的印刷测量系统,“点”大约是1/72英寸。这带来了另一个问题:

它说“分母中的72分反映了每英寸的分数。”这与DPI有关还是没有?

不。再次,这些是印刷点 - 您设置点大小的相同单位。这就是为什么它首先是分母的一部分:点大小用72点到1英寸的测量系统表示,并且必须以某种方式考虑在等式中。

现在,印刷点与输出设备的点或像素不同。虽然在桌面出版的早期阶段,屏幕分辨率通常为每英寸72像素,这确实对应于每英寸72点的印刷系统(当然不是巧合),但当然输出分辨率可能会有所不同非常显着,因此记住点与像素的区别非常重要。

在示例中,它表示'18点'。这18用于计算分辨率还是pointSize?

都不是。这是点大小;往上看。整个示例可以翻译如下。使用基于每个2048个单位的字体,如果特定的字形功能长度为550个单位,并且字形在屏幕分辨率为72的设备上以18个点(即18/72英寸)的大小显示每英寸像素数,该功能的像素大小为4.84。

它说“分辨率是输出设备的分辨率”。这是DPI吗?我在哪里可以获得这些信息?

这是DPI / PPI,是的。您必须查询某些系统API以获取该信息,或者只是在您定位特定设备时对该值进行硬编码。

© www.soinside.com 2019 - 2024. All rights reserved.