MSDN的truetype字体文章(https://docs.microsoft.com/en-us/typography/opentype/otspec160/ttch01)为将FUnit转换为像素提供了以下内容:
将em平方中的值乘以比例将其转换为像素坐标系中的值。这个比例是:
pointSize *分辨率/(每英寸72点* units_per_em)
其中pointSize是要显示字形的大小,而resolution是输出设备的分辨率。分母中的72表示每英寸的点数。
例如,假设在72 dpi屏幕上18点时字形特征的长度为550 FUnit。每个em有2048个单位。通过以下计算可知,该特征的长度为4.83像素。
550 * 18 * 72 /(72 * 2048)= 4.83
问题:
不幸的是,Apple的文档或多或少都是相同的,除了除了阅读stb_truetype的源代码外几乎没有其他资源。
答案 0 :(得分:1)
它说:“ pointSize是显示字形的大小。”一个如何计算它,以及它的单位是什么?
您无需计算磅值,而是对其进行设置。这是您要显示字体的标称大小(请考虑使用文本编辑器中的字体菜单)。 “磅数”是传统的印刷测量系统,“磅数”约为1/72英寸。这带来了另一个问题:
它说:“分母中的72表示每英寸的点数。”这与DPI有关吗?
不。同样,这些是印刷点-用来设置点大小的单位。这就是为什么它首先成为分母的一部分:点大小以72点至英寸的测量系统表示,并且在某种程度上必须在方程式中加以考虑。
现在,印刷点与输出设备的点或像素不同。尽管在桌面发布的初期,通常每英寸72像素的屏幕分辨率确实与每英寸72点的印刷系统相对应(绝非偶然),但是如今这些输出分辨率当然会有所不同非常重要,因此请务必牢记 point 与 pixel 的区别。
在示例中,其显示为“ 18点”。这18是用于计算分辨率还是pointSize?
都不是。 是点的大小;往上看。整个示例可以翻译如下。使用基于每em 2048个单位的字体,如果特定字形特征的长度为550 em单位,并且字形在屏幕分辨率为72的设备上以18点的大小(即18/72英寸)显示。每英寸像素数,该功能的像素大小将为4.84。
它说“分辨率是输出设备的分辨率”。这是DPI吗?我从哪里可以得到这些信息?
是DPI / PPI,是的。您必须查询一些系统API来获取该信息,或者如果要定位到特定设备,则只需硬编码该值即可。