高分辨率時代 Windows系統(tǒng)能跟上嗎?
泡泡網(wǎng)液晶顯示器頻道4月18日 iPhone 4提出“視網(wǎng)膜”概念、3.5寸屏幕上做到960×640分辨率/330PPI像素密度之后,這個世界就開始瘋狂了,安卓手機已經(jīng)做到了5.5寸2560×1440分辨率,像素密度超過500,平板機也紛紛配備2560×1600。
又是蘋果,將“視網(wǎng)膜”的概念引入到MacBook系列之后,常年沉迷于1366×768的筆記本們也瘋了,不約而同地開始拔高分辨率,3200×1800就有好幾家,東芝甚至帶來了4K級別的3840×2560,像素密度普遍達到了250PPI上下。桌面上,4K顯示器也開始紛紛嶄露頭角。
但是慢著,在奔向高分辨率的同時,還有一個根本性問題:Windows操作系統(tǒng)的支持。首先區(qū)分一下兩個概念。
PPI(Pixel Per Inch):每英寸像素點數(shù)量,來源于數(shù)碼相機的感光器(一般是CCD)。
DPI(Dot Per Inch):每英寸點數(shù),來源于印刷、打印機,是打印精度指標。
二者原本并不完全相同,但是在屏幕、圖像分辨率方面基本上就是一回事兒,計算方法也是相同的,只不過是Windows里還在習(xí)慣性地使用DPI。
Windows設(shè)備屏幕尺寸、分辨率、DPI
一些高分辨率筆記本
Windows XP的首次嘗試
讓我們先看看這款在輔以十多年后已經(jīng)歇菜的老系統(tǒng),它也是Windows第一次開始支持更改DPI,自然毛病很多,比如說如果你把DPI設(shè)置得太高,很多程序就會出現(xiàn)顯示問題。
其實,XP也提供了一個API,讓開發(fā)者檢查、縮放字體大小,但如果軟件沒有檢查字體的DPI等級,那就麻煩了,比如說UI元素和文本框重疊,表格文字溢出,還曾經(jīng)會有部分界面跑到屏幕之外看不到。
XP本身的縮放也不完美:窗口的最大/最小化、關(guān)閉按鈕變的過大,標題欄文字特別粗放,系統(tǒng)通知區(qū)域圖標滿是鋸齒和模糊。
Windows XP 96 DPI
Windows XP 120 DPI
Windows XP 144 DPI
不完美的DPI虛擬化
針對那些根本不關(guān)DPI的軟件,Windows Vista引入了一項新技術(shù)“DPI Virtualization”(DPI虛擬化)。如果DPI不超過120,繼續(xù)使用XP的縮放機制,超過之后就開啟這個新模式。
其實說起來也很簡單,所謂的DPI虛擬化,只不過是系統(tǒng)欺騙那些不支持高DPI的軟件,讓它們以為DPI其實是最基本的96(相當(dāng)于1280×1024分辨率的17寸顯示器),然后由系統(tǒng)離屏渲染軟件界面,再放大到用戶選擇的DPI級別上。
這樣解決了文字亂跑的問題,但很容易造成顯示模糊,并不是完美的解決方法。
為此,微軟引入了另外一個API SetProcessDpiAwareness,本身支持DPI縮放的軟件可以用它告訴系統(tǒng)不要動我。
亂了亂了都亂了
如果大家都嚴格遵守微軟的開發(fā)章程,也能湊合著過,但問題在于,開發(fā)者們都太隨意了。來看幾個具體例子。
VLC 1.0就不在乎DPI,直接鎖定在96。通過DPI虛擬化,Windows可以自動調(diào)整其顯示大小,雖然字體、空間有些模糊但也不是沒法用。
問題在于,這是個媒體播放軟件,視頻也是縮放而來的,自然就沒法看了。
隨后,VLC宣稱開始支持DPI縮放,但是除了字體清晰點,其實完全沒有支持到位,各種播放空間紋絲不動,與放大了的系統(tǒng)按鈕極為不協(xié)調(diào)。
即便是最新的2.1.3版本,也是這個樣子。
VLC 1.1.1
VLC 2.1.3
這里并非單獨指責(zé)VLC,因為它只是一個例子而已。再看看Google Chrome——其實它是支持高DPI的,Chrome OS、Mac OS X、Android系統(tǒng)里都很好,就是Windows里不行。
以下截圖來自聯(lián)想Yoga 2 Pro,屏幕分辨率3200×1800,Windows縮放級別設(shè)置為200%(默認的)。
看起來似乎很好,但是打開100%比例原圖,你就會發(fā)現(xiàn)無論是瀏覽器控件、按鈕,還是標題欄、地址欄、頁面字體,都滿是“狗牙”。
截取一部分直接看就更明顯了。
幸運的是,Chrome提供了解決方法;不幸的是,一般人根本找不到。
首先,你要在地址欄輸入“chrome://flags”,打開設(shè)置頁面,勾選“HiDPI Support Windows”。
然后,你得右鍵點擊Chrome桌面圖標,選擇屬性,然后選擇兼容性標簽,勾選“高DPI設(shè)置時禁用顯示縮放”。
這個選項的作用是針對單個軟件禁用Windows DPI虛擬化,改而使用XP算法。
這樣設(shè)置下來,Chrome就完美了,所有字體都很平滑。
一個比較好的例子是IE11(簡直廢話),微軟至少在自家瀏覽器上做了個榜樣,會根據(jù)當(dāng)前DPI級別放大UI元素,然后使用自己的縮放功能來放大頁面和字體。
IE11還會根據(jù)系統(tǒng)DPI級別來確定自己的縮放級別??纯?200×1800分辨率下DPI 96時的樣子,似乎很怪,但其實是完全應(yīng)該有的樣子。
沒有最糟 只有更糟
其實如果大家都遵照微軟的開發(fā)指導(dǎo)來做,Windows下的高DPI雖不可能完美但也不會太爛,問題就在于很少有人真正嚴格按照微軟的規(guī)范去做。
這里我們跳出來的反面典型是Adobe,為了便于跨平臺就完全自顧自己的UI。Windows下的大多數(shù)軟件至少會在不同程度上使用WPF或者Windows Forms來開發(fā)界面,Adobe則是百分之百自己來。
接下來的幾個截圖都是在3200×1800、200% DPI上截取的。
即便是安裝程序,Adobe也是自己搞一套,導(dǎo)致字體非常小,很難閱讀。
再看Adobe Reader XI,文件菜單還行,但是所有的工具欄圖標都小得可憐,右側(cè)工具面板也完全沒法用。
Adobe Photoshop Elements是最惡劣的,甚至連開始菜單都是自主UI,慘不忍睹。
之所以這里痛批Adobe,主要是因為它其實最不該這樣。要知道,Adobe的用戶可都是從事圖形、數(shù)碼、影視等方面的高精尖專業(yè)人士,通常也是最早接觸新顯示技術(shù)的人群,包括4K、高DPI。
Windows 8.1做得怎么樣?
Windows 8在高DPI支持方面沒有任何改進,令人失望透頂,不過最新的Windows 8.1還算夠意思,加入了不少新特性。
這其中最大的變化,就是可以針對每個顯示器設(shè)置單獨的DPI級別,非常適合拿著個Surface Pro再外接一臺顯示器等場合。
此外還有系統(tǒng)DPI軟件的DPI虛擬化、DPI變化通知、獲取顯示器DPI的API、默認DPI計算考慮視距、屏幕DPI變化無需重啟。
所有這些變化都是針對傳統(tǒng)桌面模式的,比之前好多了,但還是沒有蘋果Mac OS X的處理方法高級。
Modern模式從一開始就考慮了高DPI,不存在任何問題。Windows Store商店里的應(yīng)用會由系統(tǒng)根據(jù)屏幕尺寸、分辨率、設(shè)備類型來自動縮放,級別包括100%、140%、180%等等。
微軟還鼓勵Modern應(yīng)用開發(fā)者盡可能使用矢量元素,或者多個位圖拷貝。
除了支持DPI縮放,Windows Store應(yīng)用還可以根據(jù)屏幕物理尺寸決定顯示多少內(nèi)容,更大的屏幕可以顯示更多。
此外,Windows Store應(yīng)用支持DPI縮放所需要的代碼工作也少得多,應(yīng)用本身都無需特別關(guān)注DPI,因為默認所有應(yīng)用都是默認支持的,XAML布局、SVG圖形也都可以由系統(tǒng)靈活縮放。
這是Adobe Touch,Adobe Reader Modern版本,13.3寸3200×1800屏幕上完美顯示,所有的UI元素大小都很合適,觸摸也無問題。
結(jié)語
Windows在高DPI問題處理上一直不夠完美,但微軟也一直在努力,而且一味指責(zé)微軟做不好是很不公平的。首先,Windows既要創(chuàng)新,也要保證向下兼容性,老的API、代碼都不能不照顧,否則老程序就沒法運行。
其次,Windows支持的設(shè)備五花八門,要面對各種不同規(guī)格的顯示器尺寸、分辨率、形態(tài)規(guī)格,都得兼顧。
Windows 8.1已經(jīng)官方支持三種DPI應(yīng)用狀態(tài),包括DPI未知、DPI系統(tǒng)感知、DPI每屏幕感知,還有個非官方的第四種狀態(tài),DPI未知偽裝DPI感知,但尚無解決方法。
之前因為高分辨率設(shè)備不多,軟件開發(fā)人員自然懶得去支持。如今隨著顯示器、筆記本、平板機不斷拔高分辨率,市場和用戶需求在哪兒擺著,相信會有越來越多的軟件重視這個問題。
Windows,自己也需要繼續(xù)完善,當(dāng)然這里說的是桌面模式下?!?
關(guān)注我們
