
在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 可以「縮放」透過繪圖繪製的軟體和應用程式GDI(包括作業系統的所有部分),將所有向量元素縮放到所需的百分比。
例如,設定 150% 縮放會將 600x400 像素視窗調整為 900x600 像素;縮放視窗中的 32x32 px 圖示將調整為 48x48 px;距頂部 8 px、距左側 16 px 的按鈕將被移動距頂部 12 px、距左側 24 px,並且 12 磅字體將繪製為 18 磅。設定 200% 縮放將使原始參數加倍,依此類推。
這將保留所有元素的相對大小和位置,使項目更易於閱讀、單擊或觸摸,因此自訂縮放設定可以透過多種方式發揮作用:1) 使系統和應用程式在高DPI 螢幕上更具可讀性 2 ) 允許為視力不佳的人調整項目的大小 3) 使系統對觸摸更加友好,因為觸摸不如用滑鼠點擊準確,並且在可點擊項目之間需要更多空間
這種縮放機制(稱為“GDI 縮放”)實際上在螢幕上重新繪製了軟體/應用程式的GDI 輸出,並在Vista 中重新引入- 隨著高DPI 和觸控螢幕變得越來越普遍,它在過去十年中獲得了越來越多的關注。它補充了可追溯到XP 的舊縮放方法,其中圖形輸出被視為點陣圖圖像並相應地縮放,這導致縮放的應用程式看起來模糊並且與本機DPI 感知渲染清晰地區分,這就是為什麼新機制被稱為術語「讓 Windows 嘗試修復應用程序,使其不模糊」。
不幸的是,GDI 縮放對點陣圖圖形沒有幫助,因此它們仍然被縮放為點陣圖- 在前一個範例中,32x32 px 圖示將變為48x48 px,但無論如何它都會被放大的、解析度較低的32x32px 位圖填滿。
更糟的是,如果開發人員最初依賴系統動態修改GDI 來縮放螢幕上的輸出而打破的假設,某些軟體可能會以各種不可預測的方式出現錯誤,因此在更改縮放設定時,舊軟體應該小心謹慎已測試。因此,GDI 縮放可以透過設定「修復應用程式縮放」來控制。
答案3
我最近遇到了這個問題。我想對上述解決方案進行補充,這有助於解決您的筆記型電腦啟用了縮放功能並且您希望在輔助顯示器上運行“未縮放”的應用程式的情況。
在此範例中,筆記型電腦是高解析度螢幕,尺寸僅為13 英寸,因此需要進行縮放才能讀取較小的字體,但我透過USB-C 連接連接了多台顯示器,這些顯示器均為24 英寸標準高清,不需要應用縮放係數通過使用縮放功能並設置每個應用程序兼容性->更改高DPI 設定功能,我可以從通常在大型顯示器上運行的應用程序中刪除縮放功能,並使其在筆記本電腦上使用。