科普:为什么要缩放?屏幕缩放和显示器分辨率存在固定关系吗?

科普:为什么要缩放?屏幕缩放和显示器分辨率存在固定关系吗?

前言

长久以来,我时不时就看到网络上有人争辩缩放和分辨率的关系。一些人固执的认为 4K 显示器就一定要 200% 缩放,或 1080P 等于 100% 缩放。他们甚至会给其他人“纠错”。这看起来非常搞笑,因为这类观点无论从主观还是客观上看都是完全错误的。实际上缩放和「分辨率 + 显示器尺寸」同时相关,你不可能仅靠分辨率来确定缩放关系。

本文将从概念以及部分技术细节上介绍缩放是什么,以及和分辨率、物理尺寸的关系。

DPI

DPI(Dots Per Inch)是决定缩放的最重要指标,它和物理尺寸相关又和软件逻辑相关。简单的说 DPI 表示一英寸长的物理尺度上由多少个像素点表示。那似乎 DPI 越高,意味着显示越细腻?实际并不是,因为这里的像素点数量有时候和物理参数不对应。

你很可能听过 PPI(Pixels Per Inch)这个概念,听上去 DPI 和 PPI 很类似?如果 DPI 值和物理参数是 1:1 映射的,二者都能表示像素的密度。但 DPI 在现代操作系统里是一个逻辑值,所以不一定表示现实世界的像素密度。而 PPI 基于物理参数计算,永远是客观的指标。

在如今的显示系统中,例如 Windows 的 DWM、Linux 上的 Wayland、X11 等,会将 96 作为基准 DPI 值。这个值继承自过去的打印机标准,它是一个非常过时的值。为什么这么说呢?

如果我们基于 96 DPI 来反推 1080P 的显示器尺寸:

宽=水平像素数DPI=192096=20 英寸\text{宽} = \frac{\text{水平像素数}}{\text{DPI}} = \frac{1920}{96} = 20 \text{ 英寸}宽=DPI水平像素数​=961920​=20 英寸

高=垂直像素数DPI=108096=11.25 英寸\text{高} = \frac{\text{垂直像素数}}{\text{DPI}} = \frac{1080}{96} = 11.25 \text{ 英寸}高=DPI垂直像素数​=961080​=11.25 英寸

有了宽和高,我们代入对角线公式:D=Winches2+Hinches2D = \sqrt{W_{\text{inches}}^2 + H_{\text{inches}}^2}D=Winches2​+Hinches2​​,得出:D≈22.9469 英寸D \approx 22.9469 \text{ 英寸}D≈22.9469 英寸。

如果从笔记本电脑的角度来看,22.9 英寸的屏幕尺寸是非常罕见的。大多数 1080P 笔记本电脑的屏幕尺寸在 13 到 17 英寸之间,这意味着它们的 DPI 实际上远高于 96。也许你要反驳了,在台式机上不有很多 1080P 的显示器在这个尺寸附近甚至更大吗?

是的。台式机显示器由于分辨率长期落后,96 DPI 的问题还不显著。但如果你使用的是 4K 显示器呢?让我们来计算一下 3840x2160 分辨率在 96 DPI 下会是什么尺寸,你最终会得到 D≈45.8939 英寸D \approx 45.8939 \text{ 英寸}D≈45.8939 英寸。嗯,你没有看错。如果 96 DPI 是对应物理参数的,你的显示器将达到 45 英寸以上。

由于现实中的 4K 显示器尺寸通常远小于 45 英寸,故意味着它们的 DPI 远高于 96。假设你的 4K 显示器是 27 英寸的,那么它的 DPI 实际上是:W2+H2D≈163.1783\frac{\sqrt{W^2 + H^2}}{D} \approx 163.1783DW2+H2​​≈163.1783。也就是说它一英寸长度呈现了 163 个像素点,而 96 个像素对应 58.8% 英寸。所以它实际上和理论显示效果相比缩小了接近一半。这就是为什么分辨率越高,显示越小的原因。

计算缩放

如果你看懂了上面的内容,那自然就能懂为什么要缩放。因为你需要把 DPI 这个逻辑值映射到实际的参数上,也就是 163 的 DPI。甚至是 1:1 的映射,一个逻辑像素精确对应一个物理像素。而以上有提到 96 是基准值,所以我们的理论值和 96 的关系决定了缩放比例。在 27 英寸 4K 显示器上,缩放比例就是 (163.17/96)×100≈169.97%(163.17 / 96) \times 100 \approx 169.97\%(163.17/96)×100≈169.97%。

由于 Windows 这样的系统未提供如此精确的自由缩放,它通常以 25% 为步进增加缩放选项。所以你要么选择 150%,要么选择 175% 作为缩放比例。它通常只能近似,无法精确对应理论值。因为分数缩放是很麻烦的,它极难避免图形呈现时的一些边角瑕疵。Windows 包括 Wayland 都没有让这种缩放过于自由。过去的合成器甚至只能整数倍(如 200%)缩放。

那么回到本文的开始的问题,4K 需要 200% 缩放吗?它没有答案,因为这明显只能算半个问题。它缺少屏幕的尺寸信息。当你的显示器较小时,它可能需要更高的缩放。当大到一定程度,就不需要缩放(例如上面提到的 45.89 英寸)。如果它再继续增大,你甚至要降低缩放(到 100% 以下)。

这里又引入了另一个问题。缩放到底是了什么?避免显示过小吗?准确的说,它应该和另一个机制互相配合,让相同的内容在不同分辨率下呈现为相似的物理尺寸。带来“统一性”。

内容尺寸

我们能否看清屏幕内容,取决于两个因素。一是内容的物理尺寸,二是显示的细腻程度。物理尺寸很好理解,一个字它在屏幕的物理尺寸上占多大。无论你什么分辨率,这个字都应该是接近的物理尺寸大小。而字的细腻程度,是显示器参数决定的。例如字体过小,低分辨率可能呈现不出细节了,而高分辨率能勉强看出来。

我们无法保证后者,因为那是用户设备的硬伤。但我们能保证前者的一致性,将字体放到足够大,让用户都能看清楚。如果这时候因为分辨率不同,导致字体在其它分辨率显示的大小和我们预想的不一样,那所谓的一致性就不存在了。这就是为什么要在客观上调整缩放到接近理论 DPI 的原因。

至于你高度近视,或离屏幕太远,那是主观问题。不影响缩放参数计算是有客观意义这件事。所以当他们讨论 XX 分辨率应该调整到多少缩放时,他们完全忽略了客观全部都在讨论主观的东西。这没有任何意义,因为主观因环境和人而各自不同。

缩放机制

此章节将介绍系统、框架的缩放原理,并解释为什么某些程序缩放后不清晰。待更新。

结束语

这就是对缩放和分辨率的科普了。在知乎平台上,大约有 25% 左右的缩放/分辨率话题是在错误的前提下毫无意义的争论。但多数人还是知道和尺寸有关的。在显示器相关的另一个话题:HDR 方面,知乎起码有 75% 的内容是错误的。有机会我也想写一篇 HDR 的科普文章。