【发布时间】:2015-11-20 12:34:20
【问题描述】:
我们使用Measurestring() 根据文本长度计算大小。对于不同的屏幕分辨率,MeasureString() 给出不同的尺寸。
Graphics g;
Size size = g.MeasureString(GetItemText(this.Items[n]), this.Font).ToSize();
width=size.width;
对于屏幕分辨率 125%、size.width=76 和 对于屏幕分辨率100% 和 150%,size.width=61。
如何在这段代码中获得相同的宽度,请建议我使用 measurestring() 测量尺寸的一些想法。
等待建议........
【问题讨论】:
-
你用这个度量做什么?如果
Graphics来自屏幕上显示的内容,那么显然大小会随着屏幕分辨率而变化。这才是重点。如果您想要特定分辨率的大小,您可以在该分辨率下创建一个Bitmap,并使用其Graphics对象来测量字符串。 -
你也可以看看msdn.microsoft.com/en-us/library/…,即PageUnit属性
-
这是完全正常的,字体大小以 points 表示。一点是 1/72 英寸。当您将视频适配器的 DPI 增加到 125% 时,英寸到像素的映射比率会发生变化。从每英寸 96 像素到每英寸 120 像素。所以你需要更多的像素来获得相同的点大小。从而从 MeasureString 中获得大约 125% 的结果。当你上升到 150% 并且没有声明你的应用程序是 dpiAware 时,Windows 的 dpi 虚拟化功能就会启动。它的 dpi 是 96 并重新调整你的窗口本身。很明显,文字很模糊。
-
@HansPassant,我认为问题不清楚。我对从文件加载的 2 个 png 文件有同样的问题。两者都是 128x128 像素,一张是 75dpi,另一张是 150dpi。
MeasureString使用相同字体返回 14.xx 和另一个 28.xx,稍后在表单上绘制这两个图像时,它们的大小相同,但一个图像上的文本是另一个图像的一半大小。 Do PNGs (or JPGs) have a DPI -
这完全取决于显示图像的程序。许多人不注意图像 dpi,只是简单地缩放图像以适应窗口/屏幕。在 .NET 中,Graphics.DrawImage() 方法需要注意,而 PictureBox 则不需要。
标签: c# .net system.drawing dpi