我正在绞尽脑汁地试图理解用户选择或指定的字体大小之间的差异(例如,使用字体对话框)和 em 大小报告Font.NET 中的类。
例如:
using (FontDialog dlg = new FontDialog()) {
if (dlg.ShowDialog() == DialogResult.OK) {
Console.WriteLine("Selected font size: " + dlg.Font.SizeInPoints.ToString("0.##"));
}
}
使用上面的代码,你会得到一些令人困惑的结果:
在对话框中选择 11 会产生 11.25
在对话框中选择 12 将生成 12
在对话框中选择 14 会产生 14.25
在对话框中选择 16 会产生 15.75
无论您选择什么字体,都会发生此行为。从上面可以看出,差异没有任何模式,它似乎在 +0.25 和 -0.25 之间随机变化。
我在用户界面中通过仅将字体大小显示为四舍五入的整数来解决这个问题,但我发誓我见过允许用户选择小数字体大小的文字处理/DTP 包 - 并且这些包不显示上述行为与 Windows 字体对话框交互时。
谁能对此提供一个合理的解释?是否有在 UI 中显示字体大小的最佳实践技术?当用户想要小数尺寸(例如“10.5”)时该怎么办?
考虑这些花絮:
- 由于这些事情是由历史决定的,一英寸包含72分。
- 通常人们在以下位置运行 Windowslogical分辨率为每英寸 96 点。
- 嗯,好的,我们有点、英寸和点——这里要处理的三个单位。
- GDI 想知道有多少dots进行绘制,并且用户正在选择points.
- 最后,每英寸 72 点 / 每英寸 96 点的比率 = 每点 0.75 点。
那个 0.75 太不幸了!这意味着,如果我们允许用户直接选择点,那么理想的渲染将仅绘制逻辑点的一部分。如果我们能够将整个渲染向上或向下对齐到最近的整个逻辑点,那就太好了。
准备好?开始了!
- 11:
- 11 点 / 每英寸 72 点 = 0.153 英寸 * 每英寸 96 点 = 14.667 点,BARF!
- 让我们四舍五入到 15 个点,
- 那么 15 点 / 每英寸 96 点 * 每英寸 72 点 = 11.25 点。
- 12:
- 12 / 72 * 96 = 16 点。
- 我可以接受这一点,没有必要捏造。
- 16:
- 16 / 72 * 96 = 21.3333,BARF!
- 让我们四舍五入为 21 点 / 96 * 72 = 15.75,这样更好。
你明白了。
请记住,如果用户更改其逻辑分辨率(96 dpi、120 dpi 等),这些数字也会发生变化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)