当前位置:  开发笔记 > 编程语言 > 正文

在C#中将像素转换为英寸,反之亦然

如何解决《在C#中将像素转换为英寸,反之亦然》经验,为你挑选了2个好方法。

我希望将像素转换为英寸,反之亦然.我知道我需要DPI,但我不知道如何获取这些信息(例如我没有该Graphics对象,所以这不是一个选项).

有办法吗?



1> codekaizen..:

在视频设备上,此问题的任何答案通常都不是很准确.用于了解原因的最简单示例是投影仪.例如,输出分辨率为1024x768,但DPI​​会因屏幕与投影机的距离而有所不同.例如,WPF在视频设备上始终采用96 DPI.

假设您仍然需要答案,无论准确性如何,并且您没有Graphics对象,您可以使用一些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);



2> falstro..:

在没有了解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(或者更确切地说,当前的打印机设置).

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有