我期待pixes转换为英寸,反之亦然。我明白,我需要的DPI,但我不知道如何得到这个信息(例如,我没有Graphics对象,所以这不是一个选项)。

有一种方法

有帮助吗?

解决方案

在视频装置,任何回答这个问题通常不是非常准确。最简单的例子来使用,看看为什么是这样的情况下,是投影机。输出分辨率,就是说,1024×768,但通过DPI屏幕有多远是从投影机apeture变化。 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);

其他提示

还有,身体,不知道DPI没有真正的方法。像素是离散的,英寸都没有,如果你的显示器上说话英寸,你需要知道(至少是)分辨率(和像素宽高比)和可见监控区域,以计算出你的DPI大小。分辨率通常是可能的地方取(我不是一个C#或.NET程序员,所以我不能帮你那里),但显示器的大小通常是不可用的。如果估计值是足够好的然后让用户输入监视(即21" 或任何)的尺寸和解决DPI:

(resX/DPI)^2 + (resY/DPI)^2 = screenDiagonal^2

给(假设你知道对角和分辨率)

DPI = sqrt(resX^2+resY^2)/screenDiagonal

这只是一个估算值,如监视器从不正好21" (..或其他),和像素纵横比是几乎看恰好1:1

如果你说在纸上英寸,然后,很自然地,你需要知道您的打印机的DPI(或者,更准确地说,当前的打印机设置)。

您可以创建图形,通过调用this.CreateGraphics()简单对象(或更一般Control.CreateGraphics()),然后你似乎知道使用DPIX和DpiY性能。只要记住(有使用声明理想情况下)创建后处置的图形对象。

如果你不使用的WinForms,那么请让我们知道它是什么类型的应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top