為什麼 Windows 上的第三方軟體對高清屏支持這麼差?
為什麼Windows對高清屏支持這麼差?為什麼Windows對高清屏的顯示不做優化?Win7和8的顯示放大功能根本就是糊弄人的。Windows何時才能對高清屏有良好的支持?
==============================分割線====================================
感謝各位的回答。
其實第一次發現Windows模糊是在朋友的15寸macbook pro retina上,屏幕解析度是2800*1800,當時他的win7用的是150%顯示,整個系統使用的感受是相當的糊。
我自己用上win8 的時候,是在這個15寸1920*1080的聯想筆記本上,系統默認放大125%,我並沒感覺糊,可顯卡卻說是畫面是按1600*900的輸出,問題就出來了,如果真是按900p輸出,15寸上顯示確實感覺不出糊,可1080p的屏系統卻用降低解析度的方式顯示軟體,能不讓人失望嗎?那我們用這麼高解析度的屏不是浪費了?我想顯卡輔助軟體是不會騙人的。本人的顯卡是NV的,驅動是331.65,不存在驅動問題。
下面是按較大150%輸出,系統圖標放大了,依舊清晰,可是qq、PS根本就沒放大,不放大還真的很清晰,可它們根本就沒放大;
wps除了標題欄和部分工具欄,其它內容也沒放大,看起來很費勁;
獵豹和迅雷確實是放大了,就是這種模糊的感覺非常明顯;
放大後的chrome問題太大了,標籤都展不開,右分屏顯示chrome,關閉和最大化按鈕都溢出了;說到溢出,放大後程序內容溢出的例子就太多了。
放大125%顯示,能放大的都是按900p輸出的,不信自己放大150%,看看糊不糊,因為這次能放大的程序都按是1280*720解析度輸出的,這次高清屏是連768p屏的顯示效果都不如了。
不是所有顯示的問題都是驅動的問題。
這裡是第三方 app 更新報道區
- Geforce Experience 更新 1.8.2 之後解析度檢測已經正確(ps. 界面是清楚的)
- Chrome 37 Canary 開始,在註冊表 HKCUSoftwareGoogleChromeProfile 寫 DWORD high-dpi-support=1 即可開啟支持,效果良好
- Illustrator CS 2014 和 Photoshop CS 2014 已支持 200%
第三方 app 更新報道區結束
==========================================================
M$ 要說責任,只有三點
- 不壟斷髮行渠道,對第三方軟體不強製品質。(因為一旦控制必然導致第三方倒戈。當年任天堂怎麼死的知道沒?)
- 沒有 C/C++ 版的類 WPF 界面庫。(因此如果第三方想要軟體「清楚」,就必須自己處理界面縮放——這可不是個簡單活。當然也可以用 .NET,問題是不是所有人都裝了 .NET。)
- XP 退市太晚。(導致第三方不敢使用 Vista 以來的新功能。原因太多,當然在國內絕對是因為 Vista 和之後的 OS 不好破解。)
==========================================================
來補充 @pansz 的答案。
從 Windows Vista 開始微軟引入了一套新 API 用來處理界面縮放(是 06 年提出的,比蘋果早很多)。這套機制叫 DPI Virtualization。在 Windows 8.1 里 DPI Virtualization 被強化以讓不同顯示器有不同的 DPI 設定。DPI Virtualization 的目的是不讓老程序在高 DPI 設置下出現界面錯位,同時如果新程序可以處理縮放,則交給程序自己處理。
DPI Virtualization 依賴 dwm 實現。當 Windows 檢測到你的程序(進程)不支持 DPI 縮放時(即運行非 DPI-Aware 程序),它直接放大窗口,因為有非整比的縮放所以可能會造成界面「模糊」(不信你在 8.1 里可以試試 200% 縮放,結果是鋸齒狀的,和 OSX 一模一樣);而對於新應用則不作特別處理。這套機制的具體行為非常複雜(特別是在引入分屏 dpi 設置之後),就不多展開了。有興趣可以參閱 High DPI Settings in Windows。判斷進程是否支持縮放的 API 很奇怪地在 8.1 之前的系統里一直沒給,8.1 提供了,叫 GetProcessDpiAwareness。
Windows 應用通知系統自己支持高 DPI 有兩種方式,一種是向主進程的 manifest 中寫入信息,另一種是使用 SetProcessDpiAwareness 函數。在 Windows 8.1 中應用程序對高 DPI 支持有三級,對應 PROCESS_DPI_AWARENESS 的三個屬性,它們分別是:
- Process_DPI_Unaware:此程序不支持高 DPI
- Process_System_DPI_Aware:此程序支持在第一屏上按高 DPI 顯示,不能處理多顯示器的分別設置
- Process_Pre_Monitor_DPI_Aware:此程序可以在不同顯示器設置不同 DPI 時仍然工作良好
Vista 到 Win8 只有前兩級,因為它們沒分顯示器的 DPI 設置。此時 API 稍有變化,是使用 SetProcessDPIAware API。
對於那些被放大窗口的應用,系統會生成一系列的「假」數據給他們,包括屏幕解析度和滑鼠座標。這樣就可以保證最大程度的兼容性。
從這種處理機制中可以看出微軟在 Vista 的年代就提出了一套良好的系統來對付高 DPI 環境可能造成的兼容性問題。然而現在被很多人詬病的「Windows 不支持高分」原因在哪裡呢?原因有三:- DPI Virtualization 支持非整比縮放,導致被放大的窗口會變模糊。這是微軟的責任,他們應該使用更好的縮放演算法,例如 hqx 或者 xBRZ。但是記住,「模糊」是相對顯示屏密度而言的,在高密度顯示屏上它並沒有那麼「模糊」。更好的策略可能是像一些遊戲機模擬器那樣用兩個緩衝,一個送顯示一個給程序讀屏用。
- 仍然有大量的應用程序不支持高 DPI。這是第三方的問題。下面詳細展開。
- 和座標變換相關的問題。這個比較複雜,只會涉及一些跨窗口操作的應用程序和鉤子程序,不展開了。
在第三方應用程序這邊,因為系統得知應用是否支持高 DPI 是,應用程序通知系統的,因此就會出現四種情況:
- 應用在高 DPI 下運作正常,並通知系統:很好,應用清晰顯示,行為正確。微軟許多原廠應用(包括 Word 2013、VS2013 等)都能做到這一點。Sublime Text 3 也屬於這一類。
- 應用在高 DPI 下運作正常,然未通知系統:窗口被放大,應用程序顯示模糊但是行為正確。這種應用數量不多,一些 CAD 軟體有可能屬於這一類(CAD 界使用高分屏已久,不少軟體都有不錯的高 DPI 支持)。
- 應用不支持高 DPI 卻錯誤通知系統:系統不對應用作特別處理導致界面錯位或者大小不正確。類似題主中 WPS、Photoshop、Chrome 的情況。還有一種可能是用於啟動程序的快捷方式里設定了「在高 DPI 下禁用界面縮放」,QQ 應當是這個問題。(因為寫這個答案的時候我同時開著 QQ 和高 dpi,而我能明顯看見 QQ 窗口是被放大的。WPS 也可能是這種情況。)
- 應用不支持高 DPI 也未通知系統:窗口被放大,顯示模糊但沒有錯位,大多數老應用都在這種情況里。題主的 Geforce Experience 就屬於這種,因為被系統放大界面了所以獲取到了用於兼容用的,被「縮小」的屏幕解析度。
然後怎麼才能解決這種問題?等。如果軟體有 Issue Tracker 就上去報 bug,並且給出復現方式。讓既有應用程序支持高 DPI 是個很困難的過程,尤其是許多 Windows 軟體年齡都非常老,很多還使用了自己的 GUI 庫,像 Chrome 說要支持高 dpi 弄了好幾個版本都沒搞定。在這些應用中情況 (3) 更是害群之馬,因為它們欺騙系統獲取了原始解析度,卻無法正確處理界面縮放。我不清楚 Adobe 為什麼會這麼干,但自從 Adobe 弄出這種事情後我就拒用了 Adobe 的一切程序。
ps. Adobe 的 Acrobat XI 完美支持高清但是 Photoshop 就不支持,給我個理由先?
對於開發人員:- 請一定要誠實,應用不支持高 DPI 堅決不通知系統。避免錯位和錯誤行為是第一大事。
- 想辦法讓它支持高 DPI。
- 對 XP 做「優雅降級」,反正用 XP 的機器都不會改 DPI 設置。
怎麼說呢?這件事,既沒有那麼嚴重,又很嚴重;說是 Windows 的鍋,也不是 Windows 的鍋;說是高 DPI 支持的鍋,其實是字體渲染的鍋。
為什麼是字體渲染的鍋呢?我們來看這張圖(以下都是截自 Windows 10)。這是剛出爐的在 175% DPI 的 4K 屏上、網頁縮放 150% 的 Chrome 給我渲染的宋體:不忍直視。
不忍直視。
當然,大部分情況下沒有這麼糟,因為很多網頁在 Windows 下默認是微軟雅黑。但還是很糟:看到這個「高」,你顫抖了嗎?
看到這個「高」,你顫抖了嗎?
當然,這是 Chrome 的鍋。那麼 Windows 呢?Windows 的字體渲染似乎比上面爛出水準的(Windows 高分屏下,別的系統沒有這個問題,所以到底是 Chrome 的鍋呢,還是 Windows 的鍋呢?)的 Chrome 要好一點的。但是 DPI 呢?這可是官方程序喲。除了標題,別的地方都糊了。
這可是官方程序喲。除了標題,別的地方都糊了。再來一張官方的:
當然,其實並沒有這麼誇張。基本上除了國產軟體和一些經典系統設置外,不會碰到糊掉的問題了。
當然,其實並沒有這麼誇張。基本上除了國產軟體和一些經典系統設置外,不會碰到糊掉的問題了。
下面這張圖有三種字體樣式?其實是四種:地址欄是 MacType 渲染的高 DPI 微軟雅黑,下面的標題是 Windows 渲染的高 DPI 微軟雅黑,最下面的標籤,最左邊是 Windows 渲染的糊掉的微軟雅黑,右邊是 MacType 渲染的糊掉的微軟雅黑。
地址欄是 MacType 渲染的高 DPI 微軟雅黑,下面的標題是 Windows 渲染的高 DPI 微軟雅黑,最下面的標籤,最左邊是 Windows 渲染的糊掉的微軟雅黑,右邊是 MacType 渲染的糊掉的微軟雅黑。
下面是 MacType 在 175%*150% 的 4K 屏上渲染的中易宋體和微軟雅黑:可以看出來,處理並不太正確,不如上面地址欄來的清晰。實際上也確實是這樣,資源管理器的 MacType 渲染效果要明顯好於其它程序。目前我還不清楚原因。
可以看出來,處理並不太正確,不如上面地址欄來的清晰。實際上也確實是這樣,資源管理器的 MacType 渲染效果要明顯好於其它程序。目前我還不清楚原因。
其實 Windows 10 單就高分屏這個問題來講,已經做得很好了,可能比 OS X 都要好。Windows 10 不僅能根據屏幕物理大小和像素數算出合理的縮放比,還能自由調節 DPI,相比 OS X 就只有有限的幾個選項(雖然一般用的和 Windows 算出來的都一樣)。只有一個小問題,就是跨屏幕的拼接還是按實際解析度來。舉個極端的例子,15 寸 1600 * 900 的屏幕和 15 寸 3200 * 1800 的屏幕拼接起來,Windows 大概會自動給前者 100% 縮放,後者 200% 縮放,虛擬解析度都是 1600*900,兩者應該被當成同樣大的屏幕拼接;但事實上,拼接界面的大小,前者仍然只有後者的一半長寬,如果它們的左邊緣是對齊的,滑鼠從前者的右邊緣豎直移動到後者上去,只會達到後者的中點,這顯然是不對的。
舉了這麼多例子,就是想說明,字體渲染的問題,遠比高 DPI 支持大得多。更大的問題是,這基本只是中國人的問題,想得到改觀很難。這個是歷史原因。Windows 的一個大優勢是什麼?是兼容性,是成千上萬上億的軟體。Windows 誕生了這麼多年,這些軟體全部都是在不支持高解析度的情況下寫的,當初的所有編程介面也都沒有考慮像素密度改變的情形。
所以,如果無法要求所有的歷史應用程序重新為可變像素密度重新編程適配,或者至少是重新編譯,那麼就沒有辦法讓那些應用程序支持高清屏幕。
Windows 想了一個什麼辦法讓那些沒有使用新的支持可變像素密度的應用程序支持放大呢?大家看到了,就是強制縮放,而這導致的結果就是應用程序彷彿是被高斯模糊濾鏡渲染了一樣的結果。
現實是這樣的:對於一些不能識別 Windows 可變 dpi 的應用,在 高於 100%dpi 的情況下 Windows 會對該應用強制放大。對用戶而言,這個應用變模糊了;對這些應用而言,相當於整個系統的解析度降低了。例如 1920x1080 的解析度,加上 150% dpi,在這個應用程序看起來系統的解析度是 1280x720。
我們知道 Windows 7 內置的應用,以及微軟自己的應用(例如 Office 2013)都不會出現模糊的問題,說明其實微軟自己的應用已經能夠支持高清屏了,要更大範圍內解決這個問題只能讓第三方應用程序的開發方去識別可變 dpi,然後進行相關的處理。
我這個答案沒有太大幫助,希望有個懂 Windows 編程的人現身說法一下調用什麼 API 能夠做到。Windows 上的應用程序和硬體情況太多樣化了。
一方面,軟體開發商對更高DPI等特別的情況不夠重視;另一方面,軟體數量太大,及時更新的比例也就相對較少了,例如許多用戶量大的老版本軟體就會有問題。
你用的是RMBP?
試試升級到win8.1 Update 1,調成2880X1800的正常解析度, 然後把DPI放大開到200%
樓上說微軟沒辦法沒責任的忽略了一點: 認證標籤
微軟可以通過給軟體頒發認證來催促廠商來做良好支持, 比如給良好支持高分屏的軟體發一個"Windows Experience"認證
就像Intel inside 那樣photoshop cs6 在win8.1 的高清屏下顯示不正常,界面看起來太小了。看了adobe官方論壇大家相互踢皮球,一直沒法解決。很多用戶都抱怨的不行了
Photoshop CC / Windows 8.1 HiDPI / Retina scali...
我自己的筆記本為例:
實際1920X1080
實際1920X1080顯示1920X1080
125%DPI字體
125%DPI字體驅動裡面顯示也是1920X1080
完全沒有模糊, 型號華碩 N76
答非所問預警
題主你需要win10。
win10的DPI縮放機制比win7/8強多了。- 因為Retina屏幕普及還需要時間,在Windows使用者中只是少數,以MS的一貫風格,出力不賺錢的活不會幹。
- 技術難度,Retina渲染技術和Windows現有的ClearType技術差異較大,Windows 8開發周期太短沒有辦法推倒重來,IE10裡面的灰度渲染其實可以認為是在這方面的一個嘗試。
- 另外RMBP的渲染機制和普通Windows筆記本不同,實際上經過了多一次解析度的轉換以保證Windows程序的兼容性。
chrome最新版本不支持DPI,我裝了chrome37版本的。
發現一群不懂技術的人在瞎掰,也是佩服了,dpi顯示問題,主要是自己處理窗口縮放問題,而文字渲染則是根據縮放比例選擇文字大小,與字體渲染啥關係也沒有。
推薦閱讀: