c# - DPI 百分比缩放到实际 DPI 值

标签 c# dpi

众所周知,Windows 7 可用的 DPI 缩放比例为 100%、125%、150% 和 200%。 这四个DPI百分比的实际DPI值是

Percentage - DPI Values
100%       - 96
125%       - 120
150%       - 144
200%       - 192

请引用 DPI 缩放的链接: http://www.techrepublic.com/blog/windows-and-office/get-a-better-view-in-windows-7-by-adjusting-dpi-scaling/

我想使用 C# 获取 DPI 值。因此,我试图通过遵循 C# 代码来实现。

float x=0;
float y=0;
Graphics gp = Graphics.FromHwnd(IntPtr.Zero);// we can also use this.CreateGraphics()
x = gp.DpiX;
y = gp.DpiY;

我得到的输出如下,150% 和 200% 是错误的

100%  -  96 //both x,y values
125%  - 120 //both x,y values
**150%  -  96 //both x,y values
200%  -  96 //both x,y values**

最佳答案

如果您没有将您的应用程序声明为“DPI 感知”,Windows 会欺骗您,假装它设置为 96 DPI(尽管它不是)并负责缩放您的应用程序本身。

您可以通过任一方式“修复”此问题

  • dpiAware 条目添加到您的应用程序 list 文件或
  • 调用 SetProcessDPIAware Windows API 方法。

例如,在这个 SO 答案中可以找到两者的示例:

为了让事情变得更加复杂,Windows 8.1 引入了每个显示器的 DPI 设置,弃用了 SetProcessDPIAware。这其实是一件好事,但是it's hard to get it right .

关于c# - DPI 百分比缩放到实际 DPI 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737596/

相关文章:

c# - UWP 10 C#。将文本文件读入列表<>

c# - 在 Windows Phone 7.1 中,我的后台代理周期性任务没有被一次又一次地调用

java - (DPI) 在 Java Swing(和 Windows)中缩放字体

c# - Jssor Sliders 过渡不起作用

c# - Application.Exit() 哪个操作是第一个

c# - 如何模拟在 using() block 中实例化的对象

wpf - TransformToDevice 在 Windows 8.1 上不返回正确的 DPI 系数

android - 为多个屏幕规划自定义屏幕布局

android - 如何让Android中的ImageButton根据屏幕密度自动缩放?

c# - Win 8.1 DPI - WPF - 如何查找独立监视器/显示器的 DPI