给定32位无符号整数形式的RGB颜色(例如0xFF00FF),如何在不使用bitshift操作提取其各个组件的情况下将其反转(获得负色)?
我想知道是否可以使用按位运算(AND,OR,XOR).
更确切地说,使用最少数量指令的算法是什么?
Ahm*_*mad 18
我认为这很简单.你可以计算0xFFFFFF-YourColor.它将是倒置的颜色.
int neg = 0xFFFFFF - originalRGB
// optional: set alpha to 255:
int neg = (0xFFFFFF - originalRGB) | 0xFF000000;
Run Code Online (Sandbox Code Playgroud)
使用此方法反转每种颜色并保持原始alpha.
int invert(int color) {
return color ^ 0x00ffffff;
}
Run Code Online (Sandbox Code Playgroud)
^带0的xor()返回未修改的原始值.xor 0xff翻转位.所以在上面的例子中,0xaarrggbb我们正在翻转/反转r,g和b.
这应该是最有效的反转颜色的方法.算术(略微)慢于这种完全简单的逐位操作.
如果你想忽略原始alpha,只是让它变得不透明,你可以覆盖alpha:
int invert(int color) {
0xff000000 | ~color;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们只是翻转每一个颜色以反转包括alpha的每个通道,然后通过强制前8位高位将alpha通道覆盖为不透明0xff000000.
| 归档时间: |
|
| 查看次数: |
18599 次 |
| 最近记录: |