我正在尝试调整图像的亮度和对比度。我查看了wiki article转换RGB到HSL / HSV,然后进行调整和转换,但这会产生非常奇怪的输出。所以现在我正在看other examples它似乎工作正常..唯一的问题是如何同时调整亮度和对比度?
所以说我有100 100 100的RGB,然后我想将亮度调整为两倍,对比度为一半...... 2和0.5。我该怎么办呢?根据第二个链接,我会为所有RGB值添加100亮度,然后将这些新的RGB值插入对比公式?
有人有什么想法吗?
P.S - 这是在C中使用SDL和原始RGB值。
答案 0 :(得分:0)
不确定这会回答你的问题,但你使用的是8位彩色图片,通常使用* n *位颜色的调色板或将8位分成3个红色,3个绿色和2个蓝色。< / p>
假设您正在使用调色板,则可能需要调用SDL_SetPalette,因为您的操作会更改颜色。
如果你在3/3/2位分裂,请记住,这意味着红色只有8个离散值,绿色有8个离散值,蓝色有4个离散值。在这种情况下,颜色的变化可能看起来很奇怪。
如果只有源是8位,我建议在加载后将其转换为24/32位。
答案 1 :(得分:0)
我想你想在像HSV这样的空间工作。特别是你对价值(V)感兴趣。有关从RGB转换为HSV / HSL的公式,请参阅此链接,反之亦然。代码是javascript但是转换为C是基本的。 http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c
要考虑的另一件事是Luminance(Y)和Luma(Y') 我通常使用以下公式来表示亮度。 http://en.wikipedia.org/wiki/Luminance_%28relative%29
Y = 0.2126 R + 0.7152 G + 0.0722 B
我不确定最好使用什么:V,Y或Y'。维基说:“亮度或价值维度的定义不太明显:取决于表示的目的和目标,有几种可能性。” http://en.wikipedia.org/wiki/HSL_and_HSV#Lightness
我一直在使用Y.Y和Y'之间的差异是由于伽马校正。只要你说得对,我认为你可以使用其中之一。但也许您可以简单地使用V作为对比度和亮度。
最后,请小心考虑伽马校正。
编辑:让我概述一下我认为这个过程会如何发展。