2. 显示基础
多屏显示与触摸映射工程的第一步,不是写代码,而是把“屏幕”这件事拆开看清楚。一块屏在系统里并不是一个整体,而是由时序、像素、色彩、接口和拓扑五层信息共同描述的。理解这五层,才能解释为什么会出现“画面被拉伸”“触摸点偏移”“副屏只有 30Hz”“颜色发灰”等典型问题。
一、核心原理:一块屏的五个描述维度
分辨率描述的是像素矩阵的宽高,例如 1920×1080、2560×1440、3840×2160。它决定的是“有多少个像素点”,而不是“屏幕多大”。分辨率越高,同样尺寸下能容纳的内容越多,但对 GPU 填充率和接口带宽的要求也越高。
刷新率是每秒重绘画面的次数,单位 Hz。60Hz 表示每 16.67ms 刷新一帧,120Hz 表示每 8.33ms 一帧。刷新率影响的是运动画面的流畅度和输入延迟,触摸映射中它还会影响“触摸采样—画面反馈”的同步感。
像素密度通常用 PPI(Pixels Per Inch)表示,即对角线像素数除以对角线英寸数。PPI 决定视觉细腻程度,也决定系统缩放策略。高 PPI 屏若不做缩放,UI 元素会小到无法点击;若缩放不当,触摸坐标与显示坐标之间就会产生比例误差。
色彩空间描述颜色如何被编码和解释。常见的有 sRGB、Display P3、Adobe RGB、Rec.709、Rec.2020。同一组 RGB 数值在不同色彩空间下代表不同颜色,因此“颜色发灰”往往不是屏坏了,而是色彩空间与输出格式不匹配。
显示接口是像素数据从 GPU 到屏幕的物理通道,常见有 HDMI、DisplayPort、USB-C(DP Alt Mode)、VGA、DVI、eDP、MIPI DSI。接口决定带宽上限,而带宽 = 分辨率 × 刷新率 × 色深 × 编码开销。带宽不足时,系统会自动降刷新率、降色深或降分辨率。
二、方法流程:从参数到可用多屏
工程上建议按以下顺序确认显示参数,避免“先接上再说”导致的反复返工:
- 确认物理接口与带宽:查看 GPU 输出口类型、线材规格、屏幕输入口。例如 4K@60Hz 需要 HDMI 2.0 或 DP 1.2 以上。
- 读取屏幕 EDID:EDID 是屏幕向系统上报的能力清单,包含支持的分辨率、刷新率、色彩空间和时序。
- 设置分辨率与刷新率:优先使用屏幕原生分辨率,刷新率取接口与线材能稳定支持的最高值。
- 设置缩放与像素密度:高 PPI 屏按系统推荐缩放,记录缩放比例,供触摸映射换算使用。
- 确认色彩空间与输出格式:RGB 4:4:4 适合桌面文字,YCbCr 4:2:0 会损失色彩细节。
- 选择多屏扩展模式:扩展、复制或仅第二屏,并记录每块屏的坐标原点与尺寸。
在 Linux 下可以用以下命令快速读取当前显示状态:
# 查看 DRM 连接器与模式
cat /sys/class/drm/card0-HDMI-A-1/status
cat /sys/class/drm/card0-HDMI-A-1/modes
# 使用 xrandr 查看与设置多屏
xrandr --query
xrandr --output HDMI-1 --mode 1920x1080 --rate 60 --right-of eDP-1
# 查看触摸设备与坐标映射
xinput list
xinput map-to-output "ILITEK Touch" HDMI-1
三、案例场景:双屏扩展下的触摸偏移
某自助终端使用 15.6 英寸 1920×1080 主屏和 21.5 英寸 1920×1080 副屏,系统设置为“扩展模式”,副屏位于主屏右侧。用户点击副屏右侧按钮时,实际触发的是主屏右侧区域。排查发现:触摸设备仍绑定在主屏坐标系,副屏的触摸事件被映射到了主屏的 0~1920 范围,而副屏实际坐标应从 1920 开始。解决方法是把触摸设备映射到副屏输出,并确认副屏的坐标原点偏移。
提示:扩展模式下,每块屏都有自己的坐标原点和分辨率。触摸映射必须同时知道“触摸设备属于哪块屏”和“这块屏在虚拟桌面中的偏移”。
四、误区与复盘
| 误区 | 现象 | 根因 | 修正 |
|---|---|---|---|
| 只看分辨率不看刷新率 | 画面卡顿、触摸反馈延迟 | 接口带宽不足,系统降频 | 核对接口与线材规格,优先保证刷新率 |
| 忽略 PPI 与缩放 | UI 过小或触摸点偏移 | 缩放比例未参与坐标换算 | 记录缩放系数,映射时按比例还原 |
| 色彩空间混用 | 颜色发灰、偏色 | sRGB 与 P3 未统一 | 统一输出色彩空间,检查 EDID 声明 |
| 复制模式直接套用扩展坐标 | 触摸错位、点击无效 | 复制模式分辨率取交集,坐标被压缩 | 复制模式需重新计算统一坐标系 |
| 热插拔后不重新枚举 | 副屏黑屏或触摸失效 | DRM 连接器状态变化未监听 | 监听热插拔事件,重新读取 EDID 与绑定 |
注意:多屏工程中,显示参数与触摸映射是强耦合的。任何一项变化——分辨率、刷新率、缩放、色彩空间、接口、扩展模式——都可能让原本正常的触摸坐标失效。建议把每块屏的参数固化成配置清单,作为触摸映射的输入依据。
把分辨率、刷新率、像素密度、色彩空间、显示接口和多屏扩展模式这六个概念串起来,就得到了多屏显示工程的“参数底座”。后续的触摸映射、坐标变换、事件分发和校准,都是在这个底座上进行的。底座不稳,上层必然反复出问题。