gpt4 book ai didi

c# - .NET GDI+ 中的字体大小差异?

转载 作者:太空狗 更新时间:2023-10-29 18:21:07 27 4
gpt4 key购买 nike

我绞尽脑汁试图理解用户选择或指定的字体大小(例如,使用 FontDialog)与 Font< 报告的 em-size 之间的差异/strong> .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分。
  • 通常人们以每英寸 96 点的逻辑分辨率运行 Windows。
  • 嗯,好的,我们有点、英寸和点——这里要处理三个单位。
  • GDI 想知道要绘制多少个,而用户正在选择
  • 最后,每英寸 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 等),这些数字将会更改

关于c# - .NET GDI+ 中的字体大小差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544926/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com