在 Windows 10 设置中(从 1809 版开始),有一个设置“修复应用程序缩放”(在“设置”->“显示”->“高级缩放设置”下),其中有一个切换开关,上面写着:
让 Windows 尝试修复应用程序,使其不再模糊
我知道这会改变 Windows 和 Windows 应用程序处理高 DPI 显示的方式,但它究竟起什么作用?
我设法通过切换此开关修复了行为不端的应用程序,但我想了解此设置的具体作用,以便能够识别它可能导致的任何问题。
答案1
总结:设置控制GDI 缩放,一种缩放程序显示的特定技术。
要理解 Windows 的作用,需要了解操作系统如何处理图形显示。
图形程序在虚拟表面上绘制图形,即形状、文本和图像。当需要显示时,操作系统会将此虚拟表面转换为目标设备,该设备可能是显示器或打印机。这样,程序无需了解和适应显示介质,因为这部分由操作系统及其驱动程序处理。
较新的高分辨率和高 DPI 显示器带来了一个问题,即某些程序的显示对于用户来说可能太小,需要缩放。为此,微软创建了 DPI-Aware 图形 API,因此程序的显示会自动调整,但只有少数程序真正使用此接口。
对于不支持 DPI 的程序(大多数程序都不支持),Microsoft 已创建自动机制来放大显示。其第一种此类机制(Windows Vista 中已存在)基于图像调整大小算法,这意味着 Windows 会将程序绘制的屏幕放大,实际上是将一个绘制的像素转换为多个像素。结果与放大图像相同,图像变大了,但质量会下降,并且会显得模糊。
微软第二次也是最新的尝试(在 Windows 10 V1703 中引入)是当程序在其虚拟表面上绘图时拦截图形操作(GDI)。微软将此称为GDI 缩放- 看Windows 上的高 DPI 桌面应用程序开发。例如,程序可能使用 12 点字体书写文本。但是,如果目标是放大 150% 的屏幕,Windows 将改用设置为 18 点的字体,这样可以获得完全可读的结果。其他绘制调用也会以类似的方式被拦截。
这种方法具有侵入性,在某些情况下可能会导致程序失败或干扰程序(例如高 DPI 设备的 Windows 缩放问题),这就是为什么 Windows 需要用户的许可才能使用它。权限可以在整个系统范围内授予(您询问的“修复应用程序缩放”设置),也可以通过可执行文件的属性为每个程序授予(选项卡“兼容性”/“更改高 DPI 设置”)。
答案2
Windows 10 可以“缩放”通过以下方式绘制的软件和应用程序图形设计(包括操作系统的所有部分),将所有矢量元素缩放到所需的百分比。
例如,设置 150% 缩放比例会将 600x400 像素的窗口调整为 900x600 像素;缩放窗口中的 32x32 像素图标将调整为 48x48 像素;距离顶部 8 像素、距离左侧 16 像素的按钮将向顶部移动 12 像素、向左侧移动 24 像素,12 点字体将绘制为 18 点。设置 200% 缩放比例将使原始参数翻倍,依此类推。
这将保留所有元素的相对大小和位置,使项目更易于阅读和点击或触摸,因此自定义缩放设置在以下几个方面很有用:1)使系统和应用程序在高 DPI 屏幕上更易读 2)允许为视力较差的人调整项目的大小 3)使系统更加适合触摸,因为触摸不如用鼠标点击准确,并且需要可点击项目之间有更多空间
这种缩放机制(称为“GDI 缩放”)实际上会重新绘制屏幕上的软件/应用程序的 GDI 输出,并随 Vista 一起引入 - 随着高 DPI 和触摸屏的日益普及,这种机制在过去十年中越来越受欢迎。它补充了可追溯到 XP 的旧缩放方法,在该方法中,图形输出被视为位图图像并进行相应缩放,这导致缩放后的应用程序看起来模糊,并且与原生 DPI 感知渲染几乎没有区别,这就是为什么新机制被称为“让 Windows 尝试修复应用程序,使它们不模糊”的原因。
不幸的是,GDI 缩放对位图图形没有帮助,所以它们仍然被缩放为位图 - 在前面的例子中,32x32 像素的图标将变成 48x48 像素,但它无论如何都会被放大的、分辨率较低的 32x32px 位图填充。
更糟糕的是,如果开发人员最初依赖的假设被系统动态修改 GDI 来缩放屏幕上的输出所破坏,那么某些软件可能会以各种不可预测的方式出现故障,因此,在更改缩放设置时,应根据经验仔细测试旧软件。因此,可以通过“修复应用程序缩放”设置来控制 GDI 缩放。
答案3
我最近遇到了这个问题。我想补充一下上述解决方案,这有助于解决笔记本电脑启用了缩放功能,而您想在辅助显示器上运行“未缩放”的应用程序的情况。
在这个例子中,笔记本电脑是高分辨率屏幕,尺寸只有 13 英寸,因此需要缩放才能读取较小的字体,但我通过 USB-C 连接了多个显示器,这些显示器是 24 英寸标准高清,不需要应用缩放系数。通过使用缩放功能并设置每个应用程序兼容性->更改高 DPI 设置功能,我可以从通常在大显示器上运行的应用程序中删除缩放功能,并使其在笔记本电脑上使用的应用程序中保持功能。这不是一个完美的解决方案,但对我的情况有帮助。