如何创建十六进制颜色的对立面?例如,我想将0x000000(黑色)转换为0xFFFFFF(白色),或将0xFF0000(红色)转换为0x00FFFF(青色)。这些是相当基本的颜色,而颜色变体可以有更复杂的十六进制值,如0x21B813(绿色)。公式用于计算十六进制颜色的相反(“差异”)
是否需要按位运算符?也许每个数字的循环来计算它的镜像从0到15,或0到F(0变成F,6变成9等)
我使用的是ActionScript,所以我几乎可以肯定这会在Java中以相同的方式完成。
如何创建十六进制颜色的对立面?例如,我想将0x000000(黑色)转换为0xFFFFFF(白色),或将0xFF0000(红色)转换为0x00FFFF(青色)。这些是相当基本的颜色,而颜色变体可以有更复杂的十六进制值,如0x21B813(绿色)。公式用于计算十六进制颜色的相反(“差异”)
是否需要按位运算符?也许每个数字的循环来计算它的镜像从0到15,或0到F(0变成F,6变成9等)
我使用的是ActionScript,所以我几乎可以肯定这会在Java中以相同的方式完成。
正如Spidey所说的,只是使用0xFFFFFF - COLOR。
在ActionScript你会做这样的事情:
public static function pad(str:String, minLength:uint, pad:String):String {
while (str.length < minLength) str = pad + str;
return str;
}
var color:Number=0x002233;
var hexColorStr:String = "#" + pad((0xFFFFFF-color).toString(16), 6, "0");
在Java:
int color = 0x002233;
String hex = String.format("06X", (0xFFFFFF - color));
在C#:
int color = 0x002233;
string hex = (0xFFFFFF - color).ToString("X").PadLeft(6, '0');
只要做0xFFFFFF - 颜色。
现在我很高兴我没有创建一个循环函数。这是你指出的一个明显的解决方案。多么尴尬! :) – TheDarkIn1978 2010-06-30 02:59:23
那么,它总是发生。 – Spidey 2012-05-03 23:16:24
更新的例子。格式应该全部用零填充,但我从来没有使用过ActionScript /没有解释器,所以它可能在某处稍微关闭。 – 2010-06-30 02:58:28