Unsigned Int and Colors

Unsigned Int and Colors

本文关键字:Colors and Int Unsigned      更新时间:2023-10-16

我试图改变使用无符号int (0xFF998877等)的形式0xAABBGGRR的东西的颜色,其中A是Alpha和B, G和R是蓝色,绿色和红色。

我想知道最好的方法是改变我传入的颜色慢慢变深或变浅。

由于我对unsigned int没有太多这样的经验,我的解决方案是简单地将值减去1,但这会产生奇怪的结果。是否有一个好的方法,只改变RGB元素和保持Alpha常数?我确实,在我的少量研究中,发现我可以将其他无符号整型相乘来产生我的最终结果,例如(0xFF * 0x99 * 0x99 * 0x99),但这仍然在最终结果中留下了alpha值变量。

任何帮助都非常感谢!

你需要做的是将你的颜色转换为HSL(或HSV),然后根据你的需要改变亮度(或值)。然后你需要把它转换回RGB。

在互联网上有大量的代码可以用来做这种转换。如果你有问题,我可以给你提供一些我自己的代码

我对c++中的颜色操作一无所知,但你不能简单地使用位掩码吗?或者写一个类,表示使用4 UINT8 (unsigned char)的颜色?然后,您可以轻松地编写各种不同通道的操作。

它也会成为一个伟大的API:

Colour c(128,50,50,0);
c.saturateRed(10);
c.darkerBySteps(3);
c.desaturateGreen(10);
UINT32 rawColVal = c.getRawValue();