1

我正在尝试使用 0xAABBGGRR 形式的无符号整数(0xFF998877 等)更改某些东西的颜色,其中 A 是 Alpha,B,G 和 R 是蓝色,绿色和红色。

但是我想知道最好的方法是改变我传入的颜色以慢慢变暗或变亮。

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

任何帮助是极大的赞赏!

4

2 回答 2

2

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

互联网上有大量代码可用于进行此转换。如果您对此有疑问,我可以为您提供一些我自己的代码。

于 2011-12-05T12:25:44.417 回答
0

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

它也将成为一个很棒的 AP​​I:

Colour c(128,50,50,0);
c.saturateRed(10);
c.darkerBySteps(3);
c.desaturateGreen(10);
UINT32 rawColVal = c.getRawValue();
于 2011-12-05T12:31:34.240 回答