我对 Windows 8.1 的新“每显示器 DPI”功能感到好奇。
我的问题涉及支持全局 DPI 设置但尚未“感知每个显示器 DPI”的旧版应用程序。这些应用程序可以以任何 DPI 进行渲染,因此当仅使用一台显示器时,它们应始终以显示分辨率进行渲染。
但是,当多个显示器的 DPI 设置不同时,Windows 有时必须通过简单的图像插值来缩放它们。在哪些情况下会发生插值?
我发现了相互矛盾的信息:
- VirtualDub [1] 的开发人员写道,有一个“全局 DPI”设置。所有旧版应用程序都以此分辨率渲染,然后只需插入到相应的显示器尺寸即可。这意味着在一台显示器上,旧版应用程序总是经过插入,并且很模糊。
- AnandTech [2] 写道,这些应用程序“最初会根据打开的显示器的 DPI 设置进行缩放”。只有当您将它们移动到其他显示器时,它们才会进行插值。这似乎是一个更好的解决方案 - 如果您在一个屏幕上打开程序并将它们留在那里,它们应该始终以原始分辨率呈现。
谁是对的?
[1]:http://www.virtualdub.org/blog/pivot/entry.php?id=384在“全局 DPI 设置”下
[2]:http://www.anandtech.com/show/7939/scaling-windows-the-dpi-arms-race/5第二段
答案1
我的问题涉及支持全局 DPI 设置但尚未“感知每个显示器 DPI”的旧版应用程序。这些应用程序可以以任何 DPI 进行渲染,因此当仅使用一台显示器时,它们应始终以显示分辨率进行渲染。
System–DPI Aware Applications
不会以任何 DPI 呈现 - 应用程序以 呈现,system DPI
并且 - 如果monitor DPI
不同于system DPI
- 则虚拟化为monitor DPI
。因此,即使您有一台显示器,并且该显示器的 DPI 不同于 ,system DPI
System–DPI Aware Application
也会缩放。
但是,当多个显示器的 DPI 设置不同时,Windows 有时必须通过简单的图像插值来缩放它们。在哪些情况下会发生插值?
虚拟化和渲染:
Not DPI–aware Applications
96 DPI
:在任何与 DPI 不同的显示器上渲染、虚拟化96 DPI
。System–DPI Aware Applications
system DPI
:在任何与 DPI 不同的显示器上渲染、虚拟化system DPI
。Per Monitor–DPI Aware Applications
:在monitor DPI
(WM_DPICHANGED 消息)上渲染,并未虚拟化。
我发现了相互矛盾的信息:
VirtualDub 的开发人员写道,有一个“全局 DPI”设置。所有旧版应用程序都以此分辨率呈现,然后只需插入到相应的显示器尺寸即可。这意味着在一台显示器上,旧版应用程序总是插入的,而且很模糊。
AnandTech 写道,这些应用程序“最初按打开的显示器的 DPI 设置缩放”。只有当您将它们移动到不同的显示器时,它们才会被插值。这似乎是一个更好的解决方案 - 如果您在一个屏幕上打开程序并将它们留在那里,它们应该始终以原始分辨率呈现。
谁是对的?
如果我理解正确的话:
- VirtualDub 开发人员意味着
System–DPI Aware Applications
尽管
- AnandTech 意味着
Per Monitor–DPI Aware Applications
所以两者都是正确的。
确实有——非常正确——微软信息我猜想它是 AnandTech 文章的来源之一。