对于您想要的显示尺寸Screen.PrimaryScreen.Bounds.Size(或Screen.GetBounds(myform))。
如果您需要 DPI,请使用 Graphics 的 DpiX 和 DpiY 属性:
PointF dpi = PointF.Empty;
using(Graphics g = this.CreateGraphics()){
dpi.X = g.DpiX;
dpi.Y = g.DpiY;
}
哦,等等!您想要实际的,将尺子举到显示器上并测量尺寸?!不可以。使用 any 操作系统服务是不可能的。操作系统不知道显示器的实际尺寸,或者用户如何校准它。其中一些信息在理论上是可以检测到的,但它的确定性不足以让操作系统可靠地使用它,所以它不能。
作为一种变通方法,您可以尝试一些方法。
- 您可以尝试查询已安装监控设备的显示字符串(我不知道该怎么做),看看您是否可以从中解析出合理的大小。例如,显示器可能是“ValueBin E17p”,您可能由此推断它是 17" 显示器。当然,这个显示字符串很可能是“Plug and Play Monitor”。这个方案充其量是相当粗略的。
- 您可以询问用户他们有多大尺寸的显示器。 也许他们会知道的。
一旦您知道(或认为您知道)显示器的对角线尺寸,您就需要找到它的物理纵横比。同样,有几件事:
- 假设当前像素纵横比与显示器的物理纵横比相匹配。这假设 (A) 用户选择了适合其显示器的分辨率,并且 (B) 显示器具有方形像素。我不知道目前面向消费者的电脑显示器没有方形像素,但旧款有,新款可能有。
- 询问用户。 也许他们会知道的。
一旦您知道(或认为您知道)显示器的对角线尺寸和物理纵横比是多少,您就可以计算它的物理宽度和高度。 A2 + B2 = C2,所以一些计算会给你带来好处:
如果您发现它是 17 英寸显示器,并且其当前分辨率为 1280 x 1024:
12802 + 10242 = 2686976
Sqrt(2686976) = 1639.1998047828092637409837247032
17" * 1280 / 1639.2 = 13.274768179599804782820888238165"
17" * 1024 / 1639.2 = 10.619814543679843826256710590532"
这使物理宽度为 13.27 英寸,物理高度为 10.62 英寸。这使得像素 13.27" / 1280 = 10.62" / 1024 = 0.01037" 或大约 0.263 mm。
当然,如果用户没有合适的分辨率,显示器有古怪的非方形像素,或者它是较旧的模拟显示器并且没有正确调整控件以填充显示器,所有这些都是无效的整个物理屏幕。或者更糟的是,它可能是一台投影仪。
最后,您最好执行校准步骤,让用户实际上将尺子举到屏幕上,然后为您测量物体的大小。你可以:
- 让用户在相距一英寸(或一厘米)的任意两个点上单击鼠标。
- 在屏幕上画一个盒子,让用户按上下箭头调整它的高度,按左右箭头调整它的宽度,直到根据他们的要求,这个盒子正好是一英寸(或厘米)的正方形尺子。
- 在屏幕上画一个框,让用户告诉您它在每个维度中的英寸/厘米。
无论您做什么,都不要期望您的结果是 100% 准确的。您(或用户)有太多因素在起作用,每次都无法完全正确地做到这一点。
请注意,96 dpi 通常非常接近准确。非投影屏幕上的现代像素都趋向于大约 0.25 毫米,给或取,所以如果显示器设置为原始分辨率。 (当然,这是一个很大的概括,并非适用于所有显示器。例如,Eee PC 的像素大小约为 0.19 毫米,如果我没记错规格的话。)