如何按指定字号缩放字形轮廓以匹配Windows应用渲染效果?
如何正确缩放字形轮廓以匹配Windows画图、记事本的渲染效果?
我正尝试将字形的轮廓缩放至指定字号(例如32像素),并希望渲染效果能与Windows的画图、记事本等应用中的显示一致。
我在处理Lucida Grande UI.ttf字体时遇到了问题。该字体的unitsPerEm为2048,已验证字体数据无误。提取字母'E'后得到以下数据:
xmin/xmax: 191, 1061 ymin/ymax: 0, 1480 Contour data: x=191 y=0 x=191 y=1480 x=1018 y=1480 x=1018 y=1323 x=401 y=1323 x=401 y=848 x=918 y=848 x=918 y=693 x=401 y=693 x=401 y=157 x=1061 y=157 x=1061 y=0 Font ascent / descent: 1980, -432
我此前的做法是用ymax - ymin计算字形高度,再乘以fontSize / unitsPerEm。例如:
(1480 - 0) * (32 / 2048) = 23.125
因此我预期'E'的渲染高度约为23像素。
但在记事本、画图中以32号字号渲染该字形时,其高度恰好为32像素。这说明我的缩放方法存在错误,至少无法匹配这些Windows应用的处理逻辑。
有趣的是,这种使用fontSize / unitsPerEm的方法在其他字体上有效,我不确定为何在此处不适用。看来我可能从一开始就用错了方法,只是之前未发现。
恳请有人能解释如何正确缩放字形轮廓以匹配画图、记事本等应用的渲染效果。

内容的提问来源于stack exchange,提问作者user18490
相关产品推荐
相关产品推荐

