我想将像素转换为英寸,反之亦然。我了解我需要DPI,但是我不确定如何获取此信息(例如,我没有Graphics对象,因此这不是一种选择)。

有办法吗?

最佳答案

在视频设备上,对该问题的任何答案通常都不十分准确。用来查看为什么是这种情况的最简单示例是投影仪。例如,输出分辨率为1024x768,但DPI​​随屏幕距投影机的距离有多远而变化。例如,WPF在视频设备上始终假定96 DPI。

假设您仍然需要答案,而无论其准确性如何,并且您没有图形对象,都可以在屏幕上创建一个带有P/Invoke的对象,然后从中获取答案。

Single xDpi, yDpi;

IntPtr dc = GetDC(IntPtr.Zero);

using(Graphics g = Graphics.FromHdc(dc))
{
    xDpi = g.DpiX;
    yDpi = g.DpiY;
}

if (ReleaseDC(IntPtr.Zero) != 0)
{
    // GetLastError and handle...
}


[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
private static extern Int32 ReleaseDC(IntPtr hwnd);

关于c# - 在C#中将像素转换为英寸,反之亦然,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/474810/

10-10 21:57
查看更多