泡泡网Lcd频道 PCPOP首页      /      Lcd     /      应用    /    正文

高分辨率时代 Windows系统能跟上吗?

    泡泡网液晶显示器频道4月18日 iPhone 4提出“视网膜”概念、3.5寸屏幕上做到960×640分辨率/330PPI像素密度之后,这个世界就开始疯狂了,安卓手机已经做到了5.5寸2560×1440分辨率,像素密度超过500,平板机也纷纷配备2560×1600。

    又是苹果,将“视网膜”的概念引入到MacBook系列之后,常年沉迷于1366×768的笔记本们也疯了,不约而同地开始拔高分辨率,3200×1800就有好几家,东芝甚至带来了4K级别的3840×2560,像素密度普遍达到了250PPI上下。桌面上,4K显示器也开始纷纷崭露头角。

    但是慢着,在奔向高分辨率的同时,还有一个根本性问题:Windows操作系统的支持。首先区分一下两个概念。

    PPI(Pixel Per Inch):每英寸像素点数量,来源于数码相机的感光器(一般是CCD)。

    DPI(Dot Per Inch):每英寸点数,来源于印刷、打印机,是打印精度指标。

    二者原本并不完全相同,但是在屏幕、图像分辨率方面基本上就是一回事儿,计算方法也是相同的,只不过是Windows里还在习惯性地使用DPI。

高分辨率时代 Windows系统能跟上吗?

Windows设备屏幕尺寸、分辨率、DPI

高分辨率时代 Windows系统能跟上吗?

一些高分辨率笔记本

    Windows XP的首次尝试

    让我们先看看这款在辅以十多年后已经歇菜的老系统,它也是Windows第一次开始支持更改DPI,自然毛病很多,比如说如果你把DPI设置得太高,很多程序就会出现显示问题。

    其实,XP也提供了一个API,让开发者检查、缩放字体大小,但如果软件没有检查字体的DPI等级,那就麻烦了,比如说UI元素和文本框重叠,表格文字溢出,还曾经会有部分界面跑到屏幕之外看不到。

    XP本身的缩放也不完美:窗口的最大/最小化、关闭按钮变的过大,标题栏文字特别粗放,系统通知区域图标满是锯齿和模糊。

高分辨率时代 Windows系统能跟上吗?

Windows XP 96 DPI

高分辨率时代 Windows系统能跟上吗?

Windows XP 120 DPI

高分辨率时代 Windows系统能跟上吗?

Windows XP 144 DPI

    不完美的DPI虚拟化

    针对那些根本不关DPI的软件,Windows Vista引入了一项新技术“DPI Virtualization”(DPI虚拟化)。如果DPI不超过120,继续使用XP的缩放机制,超过之后就开启这个新模式。

    其实说起来也很简单,所谓的DPI虚拟化,只不过是系统欺骗那些不支持高DPI的软件,让它们以为DPI其实是最基本的96(相当于1280×1024分辨率的17寸显示器),然后由系统离屏渲染软件界面,再放大到用户选择的DPI级别上。

    这样解决了文字乱跑的问题,但很容易造成显示模糊,并不是完美的解决方法。

    为此,微软引入了另外一个API SetProcessDpiAwareness,本身支持DPI缩放的软件可以用它告诉系统不要动我。

    乱了乱了都乱了

    如果大家都严格遵守微软的开发章程,也能凑合着过,但问题在于,开发者们都太随意了。来看几个具体例子。

    VLC 1.0就不在乎DPI,直接锁定在96。通过DPI虚拟化,Windows可以自动调整其显示大小,虽然字体、空间有些模糊但也不是没法用。

    问题在于,这是个媒体播放软件,视频也是缩放而来的,自然就没法看了。

高分辨率时代 Windows系统能跟上吗?

    随后,VLC宣称开始支持DPI缩放,但是除了字体清晰点,其实完全没有支持到位,各种播放空间纹丝不动,与放大了的系统按钮极为不协调。

    即便是最新的2.1.3版本,也是这个样子。

高分辨率时代 Windows系统能跟上吗?

VLC 1.1.1

高分辨率时代 Windows系统能跟上吗?

VLC 2.1.3

    这里并非单独指责VLC,因为它只是一个例子而已。再看看Google Chrome——其实它是支持高DPI的,Chrome OS、Mac OS X、Android系统里都很好,就是Windows里不行。

    以下截图来自联想Yoga 2 Pro,屏幕分辨率3200×1800,Windows缩放级别设置为200%(默认的)。

高分辨率时代 Windows系统能跟上吗?

    看起来似乎很好,但是打开100%比例原图,你就会发现无论是浏览器控件、按钮,还是标题栏、地址栏、页面字体,都满是“狗牙”。

    截取一部分直接看就更明显了。

高分辨率时代 Windows系统能跟上吗?

    幸运的是,Chrome提供了解决方法;不幸的是,一般人根本找不到。

    首先,你要在地址栏输入“chrome://flags”,打开设置页面,勾选“HiDPI Support Windows”。

    然后,你得右键点击Chrome桌面图标,选择属性,然后选择兼容性标签,勾选“高DPI设置时禁用显示缩放”。

    这个选项的作用是针对单个软件禁用Windows DPI虚拟化,改而使用XP算法。

高分辨率时代 Windows系统能跟上吗?

    这样设置下来,Chrome就完美了,所有字体都很平滑。

高分辨率时代 Windows系统能跟上吗?

    一个比较好的例子是IE11(简直废话),微软至少在自家浏览器上做了个榜样,会根据当前DPI级别放大UI元素,然后使用自己的缩放功能来放大页面和字体。

高分辨率时代 Windows系统能跟上吗?

    IE11还会根据系统DPI级别来确定自己的缩放级别。看看3200×1800分辨率下DPI 96时的样子,似乎很怪,但其实是完全应该有的样子。

高分辨率时代 Windows系统能跟上吗?

    没有最糟 只有更糟

    其实如果大家都遵照微软的开发指导来做,Windows下的高DPI虽不可能完美但也不会太烂,问题就在于很少有人真正严格按照微软的规范去做。

    这里我们跳出来的反面典型是Adobe,为了便于跨平台就完全自顾自己的UI。Windows下的大多数软件至少会在不同程度上使用WPF或者Windows Forms来开发界面,Adobe则是百分之百自己来。

    接下来的几个截图都是在3200×1800、200% DPI上截取的。

高分辨率时代 Windows系统能跟上吗?

    即便是安装程序,Adobe也是自己搞一套,导致字体非常小,很难阅读。

高分辨率时代 Windows系统能跟上吗?

    再看Adobe Reader XI,文件菜单还行,但是所有的工具栏图标都小得可怜,右侧工具面板也完全没法用。

高分辨率时代 Windows系统能跟上吗?

    Adobe Photoshop Elements是最恶劣的,甚至连开始菜单都是自主UI,惨不忍睹。

    之所以这里痛批Adobe,主要是因为它其实最不该这样。要知道,Adobe的用户可都是从事图形、数码、影视等方面的高精尖专业人士,通常也是最早接触新显示技术的人群,包括4K、高DPI。

    Windows 8.1做得怎么样

    Windows 8在高DPI支持方面没有任何改进,令人失望透顶,不过最新的Windows 8.1还算够意思,加入了不少新特性。

    这其中最大的变化,就是可以针对每个显示器设置单独的DPI级别,非常适合拿着个Surface Pro再外接一台显示器等场合。

高分辨率时代 Windows系统能跟上吗?

    此外还有系统DPI软件的DPI虚拟化、DPI变化通知、获取显示器DPI的API、默认DPI计算考虑视距、屏幕DPI变化无需重启。

    所有这些变化都是针对传统桌面模式的,比之前好多了,但还是没有苹果Mac OS X的处理方法高级。

    Modern模式从一开始就考虑了高DPI,不存在任何问题。Windows Store商店里的应用会由系统根据屏幕尺寸、分辨率、设备类型来自动缩放,级别包括100%、140%、180%等等。

    微软还鼓励Modern应用开发者尽可能使用矢量元素,或者多个位图拷贝。

    除了支持DPI缩放,Windows Store应用还可以根据屏幕物理尺寸决定显示多少内容,更大的屏幕可以显示更多。

高分辨率时代 Windows系统能跟上吗?

    此外,Windows Store应用支持DPI缩放所需要的代码工作也少得多,应用本身都无需特别关注DPI,因为默认所有应用都是默认支持的,XAML布局、SVG图形也都可以由系统灵活缩放。

高分辨率时代 Windows系统能跟上吗?

    这是Adobe Touch,Adobe Reader Modern版本,13.3寸3200×1800屏幕上完美显示,所有的UI元素大小都很合适,触摸也无问题。

    结语

    Windows在高DPI问题处理上一直不够完美,但微软也一直在努力,而且一味指责微软做不好是很不公平的。首先,Windows既要创新,也要保证向下兼容性,老的API、代码都不能不照顾,否则老程序就没法运行。

    其次,Windows支持的设备五花八门,要面对各种不同规格的显示器尺寸、分辨率、形态规格,都得兼顾。

    Windows 8.1已经官方支持三种DPI应用状态,包括DPI未知、DPI系统感知、DPI每屏幕感知,还有个非官方的第四种状态,DPI未知伪装DPI感知,但尚无解决方法。

    之前因为高分辨率设备不多,软件开发人员自然懒得去支持。如今随着显示器、笔记本、平板机不断拔高分辨率,市场和用户需求在哪儿摆着,相信会有越来越多的软件重视这个问题。

    Windows,自己也需要继续完善,当然这里说的是桌面模式下。■<

0人已赞

泡泡网

手机扫码关注