Fonts 如何正确缩放字体图示符轮廓?

Fonts 如何正确缩放字体图示符轮廓?,fonts,truetype,outline,glyph,Fonts,Truetype,Outline,Glyph,如何缩放字体轮廓以匹配特定的点大小 例如,我有T字形(Arial)的轮廓,如下所示: 该图示符的顶部两点位于Y坐标1466处。 根据Microsoft提供的此TrueType文档: 我必须这样计算: 点大小*分辨率/(每英寸72点*每微米单位) Arial的单位是2048,我的目标DPI是72,我想要的字体大小是12,因此如果我这样做,我得到: 1466*12*72/(72*2048)=8.589 这会使光栅化图像看起来像此图片右侧的图像: 这里左边的标志符号是写字板中12pt T的屏幕截

如何缩放字体轮廓以匹配特定的点大小

例如,我有T字形(Arial)的轮廓,如下所示:

该图示符的顶部两点位于Y坐标1466处。 根据Microsoft提供的此TrueType文档:

我必须这样计算:

点大小*分辨率/(每英寸72点*每微米单位)

Arial的单位是2048,我的目标DPI是72,我想要的字体大小是12,因此如果我这样做,我得到:

1466*12*72/(72*2048)=8.589

这会使光栅化图像看起来像此图片右侧的图像:

这里左边的标志符号是写字板中12pt T的屏幕截图,右边的是我的光栅化的

正如你们所看到的,我的不仅要小得多,而且还很模糊。这是因为它只有8.589px高,顶部像素介于两个像素之间。当我使用96 DPI作为目标设备DPI时,结果是11.4531,我猜这就是写字板的功能(pt vs px),但是它仍然很模糊,因为11.45仍然在两个像素之间

我想知道,如何缩放字形轮廓以获得像写字板一样清晰的效果?有什么想法吗


简单地将值四舍五入到完整像素不是解决方案,因为这不适用于任何带有对角线的图示符(例如A)。在写字板上看起来像彩色缩写的颜色来自Windows的ClearType功能,它使用LCD的“亚像素”在对角线轮廓上获得更清晰的效果。我现在不担心这些问题。

在阅读了更多关于它的内容后,我意识到TrueType有一种解释器语言用于网格匹配glyph。因此,我必须实现这一点:)

网格拟合本身并不能解释您在T中看到的巨大差异。你说你的“目标DPI”是72,但我打赌这不是你屏幕的实际DPI(Windows正在使用)。此外,ClearType“T”也是模糊的——只是与您自己的灰度“T”不同。但你是对的,网格拟合应该让你更接近。