1

什么是改变 RGB 像素的感知亮度的基准算法。如:

如果我有 RGB (120, 33, 213) 然后 ( ... using ... (0.299*R + 0.587*G + 0.114*B) ....) 我得到 79.533 作为感知亮度,但我没有将同一像素的亮度提高到 80 的方法,因为它有许多可能的值。

我已经搜索了一段时间的解决方案,但无法得到它。有一些算法可以计算亮度,例如:

确定RGB颜色亮度的公式

但是这些算法是不可逆的。

另外,除非有人可以纠正我,否则我不考虑使用 HSL 或 HSV 作为正确的方法?

编辑:使用 HSL 颜色空间,我能够控制亮度,同时在很大程度上保留颜色,但我想知道是否有更好的方法。

谢谢-

4

1 回答 1

2

您不需要反转亮度方程,只需计算出与所需亮度的比率。

从你的例子:

//target luminance = 80

srcR = 120
srcG = 33
srcB = 213
srcLum = 79.533

destLum = 80
ratio = (destLum / srcLum) = 1.0058717...

destR = (srcR * ratio) = 120.705
destG = (srcG * ratio) = 33.194
destB = (srcB * ratio) = 214.251

您必须决定如何对它们进行四舍五入以获得 int 值,但这是一般的想法。不过,从 79.5 到 80 并没有太大变化,所以你不会看到太多。如果你要 40,你最终会得到 RGB(60,17,107)。

正如 Mark Ransom 在下面指出的那样,一旦您的某个值达到 255,您就必须做出选择。要增加超过该点的亮度,您将更改色调或饱和度(或两者)。他在这里的回答很好地说明了两者之间的区别。

于 2013-07-26T18:43:49.243 回答