高分辨率時(shí)代 Windows系統(tǒng)能跟上嗎?
泡泡網(wǎng)液晶顯示器頻道4月18日 iPhone 4提出“視網(wǎng)膜”概念、3.5寸屏幕上做到960×640分辨率/330PPI像素密度之后,這個(gè)世界就開(kāi)始瘋狂了,安卓手機(jī)已經(jīng)做到了5.5寸2560×1440分辨率,像素密度超過(guò)500,平板機(jī)也紛紛配備2560×1600。
又是蘋(píng)果,將“視網(wǎng)膜”的概念引入到MacBook系列之后,常年沉迷于1366×768的筆記本們也瘋了,不約而同地開(kāi)始拔高分辨率,3200×1800就有好幾家,東芝甚至帶來(lái)了4K級(jí)別的3840×2560,像素密度普遍達(dá)到了250PPI上下。桌面上,4K顯示器也開(kāi)始紛紛嶄露頭角。
但是慢著,在奔向高分辨率的同時(shí),還有一個(gè)根本性問(wèn)題:Windows操作系統(tǒng)的支持。首先區(qū)分一下兩個(gè)概念。
PPI(Pixel Per Inch):每英寸像素點(diǎn)數(shù)量,來(lái)源于數(shù)碼相機(jī)的感光器(一般是CCD)。
DPI(Dot Per Inch):每英寸點(diǎn)數(shù),來(lái)源于印刷、打印機(jī),是打印精度指標(biāo)。
二者原本并不完全相同,但是在屏幕、圖像分辨率方面基本上就是一回事兒,計(jì)算方法也是相同的,只不過(guò)是Windows里還在習(xí)慣性地使用DPI。
Windows設(shè)備屏幕尺寸、分辨率、DPI
一些高分辨率筆記本
Windows XP的首次嘗試
讓我們先看看這款在輔以十多年后已經(jīng)歇菜的老系統(tǒng),它也是Windows第一次開(kāi)始支持更改DPI,自然毛病很多,比如說(shuō)如果你把DPI設(shè)置得太高,很多程序就會(huì)出現(xiàn)顯示問(wèn)題。
其實(shí),XP也提供了一個(gè)API,讓開(kāi)發(fā)者檢查、縮放字體大小,但如果軟件沒(méi)有檢查字體的DPI等級(jí),那就麻煩了,比如說(shuō)UI元素和文本框重疊,表格文字溢出,還曾經(jīng)會(huì)有部分界面跑到屏幕之外看不到。
XP本身的縮放也不完美:窗口的最大/最小化、關(guān)閉按鈕變的過(guò)大,標(biāo)題欄文字特別粗放,系統(tǒng)通知區(qū)域圖標(biāo)滿是鋸齒和模糊。

Windows XP 96 DPI
Windows XP 120 DPI
Windows XP 144 DPI
不完美的DPI虛擬化
針對(duì)那些根本不關(guān)DPI的軟件,Windows Vista引入了一項(xiàng)新技術(shù)“DPI Virtualization”(DPI虛擬化)。如果DPI不超過(guò)120,繼續(xù)使用XP的縮放機(jī)制,超過(guò)之后就開(kāi)啟這個(gè)新模式。
其實(shí)說(shuō)起來(lái)也很簡(jiǎn)單,所謂的DPI虛擬化,只不過(guò)是系統(tǒng)欺騙那些不支持高DPI的軟件,讓它們以為DPI其實(shí)是最基本的96(相當(dāng)于1280×1024分辨率的17寸顯示器),然后由系統(tǒng)離屏渲染軟件界面,再放大到用戶(hù)選擇的DPI級(jí)別上。
這樣解決了文字亂跑的問(wèn)題,但很容易造成顯示模糊,并不是完美的解決方法。
為此,微軟引入了另外一個(gè)API SetProcessDpiAwareness,本身支持DPI縮放的軟件可以用它告訴系統(tǒng)不要?jiǎng)游摇?/P>
亂了亂了都亂了
如果大家都嚴(yán)格遵守微軟的開(kāi)發(fā)章程,也能湊合著過(guò),但問(wèn)題在于,開(kāi)發(fā)者們都太隨意了。來(lái)看幾個(gè)具體例子。
VLC 1.0就不在乎DPI,直接鎖定在96。通過(guò)DPI虛擬化,Windows可以自動(dòng)調(diào)整其顯示大小,雖然字體、空間有些模糊但也不是沒(méi)法用。
問(wèn)題在于,這是個(gè)媒體播放軟件,視頻也是縮放而來(lái)的,自然就沒(méi)法看了。
隨后,VLC宣稱(chēng)開(kāi)始支持DPI縮放,但是除了字體清晰點(diǎn),其實(shí)完全沒(méi)有支持到位,各種播放空間紋絲不動(dòng),與放大了的系統(tǒng)按鈕極為不協(xié)調(diào)。
即便是最新的2.1.3版本,也是這個(gè)樣子。
VLC 1.1.1
VLC 2.1.3
這里并非單獨(dú)指責(zé)VLC,因?yàn)樗皇且粋€(gè)例子而已。再看看Google Chrome——其實(shí)它是支持高DPI的,Chrome OS、Mac OS X、Android系統(tǒng)里都很好,就是Windows里不行。
以下截圖來(lái)自聯(lián)想Yoga 2 Pro,屏幕分辨率3200×1800,Windows縮放級(jí)別設(shè)置為200%(默認(rèn)的)。
看起來(lái)似乎很好,但是打開(kāi)100%比例原圖,你就會(huì)發(fā)現(xiàn)無(wú)論是瀏覽器控件、按鈕,還是標(biāo)題欄、地址欄、頁(yè)面字體,都滿是“狗牙”。
截取一部分直接看就更明顯了。
幸運(yùn)的是,Chrome提供了解決方法;不幸的是,一般人根本找不到。
首先,你要在地址欄輸入“chrome://flags”,打開(kāi)設(shè)置頁(yè)面,勾選“HiDPI Support Windows”。
然后,你得右鍵點(diǎn)擊Chrome桌面圖標(biāo),選擇屬性,然后選擇兼容性標(biāo)簽,勾選“高DPI設(shè)置時(shí)禁用顯示縮放”。
這個(gè)選項(xiàng)的作用是針對(duì)單個(gè)軟件禁用Windows DPI虛擬化,改而使用XP算法。
這樣設(shè)置下來(lái),Chrome就完美了,所有字體都很平滑。
一個(gè)比較好的例子是IE11(簡(jiǎn)直廢話),微軟至少在自家瀏覽器上做了個(gè)榜樣,會(huì)根據(jù)當(dāng)前DPI級(jí)別放大UI元素,然后使用自己的縮放功能來(lái)放大頁(yè)面和字體。
IE11還會(huì)根據(jù)系統(tǒng)DPI級(jí)別來(lái)確定自己的縮放級(jí)別。看看3200×1800分辨率下DPI 96時(shí)的樣子,似乎很怪,但其實(shí)是完全應(yīng)該有的樣子。
沒(méi)有最糟 只有更糟
其實(shí)如果大家都遵照微軟的開(kāi)發(fā)指導(dǎo)來(lái)做,Windows下的高DPI雖不可能完美但也不會(huì)太爛,問(wèn)題就在于很少有人真正嚴(yán)格按照微軟的規(guī)范去做。
這里我們跳出來(lái)的反面典型是Adobe,為了便于跨平臺(tái)就完全自顧自己的UI。Windows下的大多數(shù)軟件至少會(huì)在不同程度上使用WPF或者Windows Forms來(lái)開(kāi)發(fā)界面,Adobe則是百分之百自己來(lái)。
接下來(lái)的幾個(gè)截圖都是在3200×1800、200% DPI上截取的。
即便是安裝程序,Adobe也是自己搞一套,導(dǎo)致字體非常小,很難閱讀。
再看Adobe Reader XI,文件菜單還行,但是所有的工具欄圖標(biāo)都小得可憐,右側(cè)工具面板也完全沒(méi)法用。
Adobe Photoshop Elements是最?lèi)毫拥模踔吝B開(kāi)始菜單都是自主UI,慘不忍睹。
之所以這里痛批Adobe,主要是因?yàn)樗鋵?shí)最不該這樣。要知道,Adobe的用戶(hù)可都是從事圖形、數(shù)碼、影視等方面的高精尖專(zhuān)業(yè)人士,通常也是最早接觸新顯示技術(shù)的人群,包括4K、高DPI。
Windows 8.1做得怎么樣?
Windows 8在高DPI支持方面沒(méi)有任何改進(jìn),令人失望透頂,不過(guò)最新的Windows 8.1還算夠意思,加入了不少新特性。
這其中最大的變化,就是可以針對(duì)每個(gè)顯示器設(shè)置單獨(dú)的DPI級(jí)別,非常適合拿著個(gè)Surface Pro再外接一臺(tái)顯示器等場(chǎng)合。
此外還有系統(tǒng)DPI軟件的DPI虛擬化、DPI變化通知、獲取顯示器DPI的API、默認(rèn)DPI計(jì)算考慮視距、屏幕DPI變化無(wú)需重啟。
所有這些變化都是針對(duì)傳統(tǒng)桌面模式的,比之前好多了,但還是沒(méi)有蘋(píng)果Mac OS X的處理方法高級(jí)。
Modern模式從一開(kāi)始就考慮了高DPI,不存在任何問(wèn)題。Windows Store商店里的應(yīng)用會(huì)由系統(tǒng)根據(jù)屏幕尺寸、分辨率、設(shè)備類(lèi)型來(lái)自動(dòng)縮放,級(jí)別包括100%、140%、180%等等。
微軟還鼓勵(lì)Modern應(yīng)用開(kāi)發(fā)者盡可能使用矢量元素,或者多個(gè)位圖拷貝。
除了支持DPI縮放,Windows Store應(yīng)用還可以根據(jù)屏幕物理尺寸決定顯示多少內(nèi)容,更大的屏幕可以顯示更多。
此外,Windows Store應(yīng)用支持DPI縮放所需要的代碼工作也少得多,應(yīng)用本身都無(wú)需特別關(guān)注DPI,因?yàn)槟J(rèn)所有應(yīng)用都是默認(rèn)支持的,XAML布局、SVG圖形也都可以由系統(tǒng)靈活縮放。
這是Adobe Touch,Adobe Reader Modern版本,13.3寸3200×1800屏幕上完美顯示,所有的UI元素大小都很合適,觸摸也無(wú)問(wèn)題。
結(jié)語(yǔ)
Windows在高DPI問(wèn)題處理上一直不夠完美,但微軟也一直在努力,而且一味指責(zé)微軟做不好是很不公平的。首先,Windows既要?jiǎng)?chuàng)新,也要保證向下兼容性,老的API、代碼都不能不照顧,否則老程序就沒(méi)法運(yùn)行。
其次,Windows支持的設(shè)備五花八門(mén),要面對(duì)各種不同規(guī)格的顯示器尺寸、分辨率、形態(tài)規(guī)格,都得兼顧。
Windows 8.1已經(jīng)官方支持三種DPI應(yīng)用狀態(tài),包括DPI未知、DPI系統(tǒng)感知、DPI每屏幕感知,還有個(gè)非官方的第四種狀態(tài),DPI未知偽裝DPI感知,但尚無(wú)解決方法。
之前因?yàn)楦叻直媛试O(shè)備不多,軟件開(kāi)發(fā)人員自然懶得去支持。如今隨著顯示器、筆記本、平板機(jī)不斷拔高分辨率,市場(chǎng)和用戶(hù)需求在哪兒擺著,相信會(huì)有越來(lái)越多的軟件重視這個(gè)問(wèn)題。
Windows,自己也需要繼續(xù)完善,當(dāng)然這里說(shuō)的是桌面模式下。■<
關(guān)注我們


