我正在尝试使用unsigned int(0xFF998877等...)以0xAABBGGRR的形式改变某些东西的颜色,其中A是Alpha,B,G和R是蓝色,绿色和红色。
我想知道最好的方法是改变我传入的颜色,慢慢变得更暗或更轻。
因为我没有很多使用unsigned int的经验,所以我的解决方案只是将值递减1,但这有奇怪的结果。有没有一种方法可以只改变RGB元素并保持Alpha不变?在我的研究很少的情况下,我发现我可以将其他无符号的整数相乘以产生我的最终结果,例如: (0xFF * 0x99 * 0x99 * 0x99)但是这仍然在最终结果中留下了alpha值变量。
非常感谢任何帮助!
答案 0 :(得分:2)
您需要做的是将颜色转换为HSL(or HSV),然后根据需要更改亮度(或值)。然后你需要将它转换回RGB。
互联网上有大量代码可供您进行此转换。如果你遇到麻烦,我可以为你提供一些我自己的代码。
答案 1 :(得分:0)
我对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();