买了 27 寸 4K,第一次开机字小得看不清。开 150% 缩放,舒服了——但某几个软件看上去发虚,而别的很锐利。
这两件事都不是显示器的问题。它们来自同一件事:屏幕上同时存在三个「分辨率」。
三个分辨率
| 名称 | 27 寸 4K @ 150% | 是什么 |
|---|---|---|
| 物理分辨率 | 3840 × 2160 | 面板上真实的像素数,出厂就定死了 |
| 逻辑分辨率 | 2560 × 1440 | 界面按这个尺寸排版,也叫「点」或 CSS 像素 |
| 渲染分辨率 | 视系统而定 | 系统实际画了多大的一张图 |
前两者的比值就是缩放倍率,在网页里叫 devicePixelRatio(DPR):
DPR = 物理分辨率 ÷ 逻辑分辨率 = 3840 ÷ 2560 = 1.5
界面元素按逻辑像素排版,然后按 DPR 映射到物理像素上。 一个「100 点高」的按钮,在 DPR = 1.5 的屏上占 150 个物理像素。
这就解释了那个最常见的困惑:截图比你以为的大。截图按物理像素存,全屏截图是 3840×2160,而你排版时看到的是 2560×1440。
至于为什么高 PPI 屏非缩放不可——像素变密了但界面元素的像素数没变,尺寸自然就缩了。27 寸 4K 的 163 PPI 下,一个 100 像素高的按钮只有 1.6 cm,而在 24 寸 1080p(92 PPI)上是 2.8 cm。这层关系和「看不出像素的距离」怎么算,在 屏幕尺寸计算 上可以直接得到。
macOS:先放大两倍,再缩回去
苹果的做法是只承认 1× 和 2× 两种后备缓冲。系统设置里的「看起来像 2560×1440」不是真的按 2560 渲染,而是:
按 2 倍的逻辑分辨率渲染:5120 × 2880
再降采样到面板的物理分辨率:3840 × 2160
好处是界面元素的几何关系永远是整数倍,不会出现半像素;代价有两个:
- GPU 要多画不少像素,高负载场景下能感觉到
- 降采样带来轻微软化 —— 5120 缩到 3840 不是整数比,细线条会被平滑掉一点点
所以在 4K 屏上,「看起来像 1920×1080」反而是最锐利的一档:按 3840×2160 渲染,正好和面板 1:1,一次采样都不用做。代价是可用空间只有 1080p 那么多。
MacBook 自带屏是另一回事——它们的物理分辨率本来就是设计来做 2× 的(比如 2560×1600 对应逻辑 1280×800),默认档位就是 1:1,最清晰。
Windows:按程序分级
Windows 走的是另一条路——不统一处理,而是让每个程序自己声明它能应付到哪一步。这就是为什么同一台机器上有的软件糊、有的不糊。
四个级别:
| 级别 | 行为 | 表现 |
|---|---|---|
| Unaware | 完全不知道有缩放 | 系统按小尺寸渲染再位图拉伸 → 糊 |
| System DPI aware | 按主显示器的缩放渲染一次 | 单屏正常;拖到缩放不同的第二块屏就糊 |
| Per-Monitor | 收到 DPI 变化通知 | 基本正确 |
| Per-Monitor V2 | 连菜单、对话框、非客户区一起跟随 | 正确 |
老工具、老安装程序、部分行业软件停留在前两级,它们发虚不是渲染质量问题,是被系统当图片拉伸了。
能做的补救:在那个程序的 exe 上右键 → 属性 → 兼容性 → 更改高 DPI 设置,把「高 DPI 缩放替代」交给应用程序自己处理。部分软件会明显改善,也有的会变成元素过小——两害相权。根治只能等作者更新。
非整数缩放为什么更容易发虚
125%、150% 这类倍率下:
1 逻辑像素 = 1.25 或 1.5 个物理像素
一条 1 像素的边框映射过去是 1.25 个物理像素,落不到整数网格上。渲染管线只能做插值,结果就是边线发灰、发虚。
矢量图形和文字通常处理得不错(字体渲染会做网格拟合),但位图资源躲不掉:图标按 1× 做的,在 1.5× 下被拉伸;按 2× 做的,在 1.5× 下被缩小。两种都不是 1:1。
所以:
- 200%(整数倍)兼容性最好,老软件也不容易出问题
- 150% 是效果和空间的折中,绝大多数现代软件没问题
- 125% 最容易暴露问题,因为半像素的偏移最明显
浏览器里的对应关系
网页开发踩的是同一套坑,只是名字不同:
window.devicePixelRatio // 1.5、2、3……
- CSS 里的 1px 是逻辑像素,不是物理像素
- 位图要提供
@2x、@3x版本,或者用srcset让浏览器按 DPR 挑 - SVG 和 icon font 天生不受影响,任何倍率下都锐利
canvas需要手动把画布的width/height设成 CSS 尺寸 × DPR,否则在高分屏上是糊的——这是最常见的一个疏漏
混用不同 DPI 的显示器
笔记本内屏 200% + 外接 1080p 显示器 100%,是最容易出问题的组合:
- 只支持 System DPI aware 的程序按主屏的倍率渲染,拖到另一块屏就被拉伸
- 有些程序需要重启才会按新屏幕重新渲染
- 窗口跨在两块屏之间时,两边都不完全对
缓解思路:尽量让两块屏的缩放比例相同或成整数倍(比如都 100%,或者 200% + 100%);把常用程序固定在一块屏上;注销重登能让大部分程序重新读取 DPI 设置。
注意这和刷新率跑不满是两回事,后者是线材带宽、系统设置、显卡策略的问题,排查顺序见 浏览器测出来的 Hz 比标称低。
选缩放档位的实用顺序
- 先算 PPI(屏幕尺寸计算 输入尺寸和分辨率即得)
- 按 PPI 取一个起步档:
| PPI | 起步缩放 |
|---|---|
| < 110 | 100% |
| 110 – 140 | 100% – 125% |
| 140 – 180 | 125% – 150% |
| 180 – 220 | 150% – 175% |
| > 220 | 200% |
- 坐正常距离看半小时,字费劲就升一档,觉得内容装不下就降一档
- 发现个别软件糊,单独调那个程序的高 DPI 兼容设置,不要为它改全局
顺带一提,如果你需要在屏幕上量真实尺寸(比如比对卡片、印刷稿),缩放会让在线尺子失准,校准方法见 屏幕尺子怎么校准。
缩放档位没有标准答案,它取决于坐姿距离和视力。上表只是起步值,最终以自己看半小时之后的感受为准。