Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET GDI+中的字体大小差异?_C#_.net_Gdi+_Font Size - Fatal编程技术网

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

C# .NET GDI+中的字体大小差异?,c#,.net,gdi+,font-size,C#,.net,Gdi+,Font Size,我绞尽脑汁试图理解用户选择或指定的字体大小之间的差异,例如,使用FontDialog和.NET中font类报告的em大小 例如: using (FontDialog dlg = new FontDialog()) { if (dlg.ShowDialog() == DialogResult.OK) { Console.WriteLine("Selected font size: " + dlg.Font.SizeInPoints.ToString("0.##"));

我绞尽脑汁试图理解用户选择或指定的字体大小之间的差异,例如,使用FontDialog和.NET中font类报告的em大小

例如:

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”)时,情况如何

这种差异没有规律可循

如您所见,字体大小以0.75为增量


编辑:如果不使用“字体”对话框,您可以微调大小,但我怀疑结果不如“首选”大小令人满意。

请考虑以下花絮:

不管历史如何决定这些事情,一英寸包含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,呕吐! 让我们四舍五入到21点/96*72=15.75,更好。 你明白了


请记住,如果用户更改其逻辑分辨率96 dpi、120 dpi等,这些数字将发生变化。

因此,从本质上讲,常用对话框中的整数大小一直都是近似值?我是唯一一个对此感到困惑的人吗?:/显然,向我的用户提供分数字体大小没有任何意义,因为在既定的惯例中已经存在不精确的因素…@Bradley Smith:据我所知,是的。但如果您以不同的DPI设置运行监视器,则情况可能会有所不同。我建议你玩弄它,如果得不到答案,问问微软自己。