说明

调暗屏幕时,伽马表到底做了什么

亮度滑块不是一个操作。从滑块到面板之间有五步, 而顺序比数值更重要。

五步运算,按顺序

对斜坡里的每一个采样点,逐个处理:

x = pow(raw, 1/gamma)
x = (x - 0.5) * contrast + 0.5
x = x * brightness
x = x * tint
x = clamp(x, 0, 1)

请仔细读第二行:对比度是绕 0.5 旋转的,不是绕零。 在 contrast 为 1 时它是恒等变换,整行等于不存在;一旦低于 1, 它就把整条斜坡往中点拉——也就是把斜坡底部抬离零。 让真黑变成深灰的是这一项,不是调光本身。

陷阱一:反复调整会复利

如果每次调整都在当前表格上再加工,第二次加工的就是一张已经被加工过的表。 正确做法是先捕获面板的原始斜坡一次,之后永远基于它。 这和「调度器乘一个已经被调暗过的值」是同一类 bug:第一次看起来没问题,之后永远在漂。

陷阱二:表格会被静默丢弃

唤醒、改分辨率、GPU 复位,都可能把表格丢掉而不通知任何人。 所以不能假设「写进去了就一直有效」:读回来, 拿一个内部采样点和你的意图比对,不一致就退避重试。 比对必须有容差,因为读回来不是逐位精确的。

陷阱三:暖色调整绝不能把面板调亮

把画面调暖,意味着抬高红、压低蓝。直白地做,峰值会超过 1,面板反而比你设定之前更亮。 约束只需要一行:把峰值归一到 1。 颜色变动不该变成亮度变动。

参考白点

所有色偏都相对于一个参考白点表达,这样参考色温就是恒等变换, 一块没被动过的面板保持原样。这个锚点选得草率,「什么都没改」就会悄悄变成「稍微暖了一点」。

诚实的边界

相关