如何在AS3中将RGB颜色转换为HEX?例如:R=253 G=132 B=58。
谢谢。
如何在AS3中将RGB颜色转换为HEX?例如:R=253 G=132 B=58。
谢谢。
Robusto的解决方案太慢了。
因为RGB值是按这种方式存储的:
8b Red | 8b Green | 8b Blue
值为0-255(这不是巧合)也有8个字节,您可以使用左位移来获取int值,然后可以获得十六进制(速度几乎快3倍)。所以:
var intVal:int = red << 16 | green << 8 | blue;
var hexVal:String = intVal.toString(16);
hexVal = "#" + (hexVal.length < 6 ? "0" + hexVal : hexVal);
当你想要转换的RGB值为红色、绿色和蓝色时。
将RGB数字转换为十六进制值并连接它们。
var hexVal = (253).toString(16) + (132).toString(16) + (58).toString(16);
hexVal = "#" + hexVal;
// returns "#fd843a"
Aurel300的方法是标准的方式,我建议你使用它。Robusto的解决方案是错误的。
如果你想避免位运算,另一种选择是使用简单的算术运算:
var intVal:int = red * 0x10000 + green * 0x100 + blue;
var intVal:int = red * 65536 + green * 256 + blue;
我发表这篇文章只是为了向您展示另一种获取十六进制值的方法(我认为这种方法更清楚地说明了组件如何相互作用并添加到最终值中),但正如我已经说过的,我会使用Aurel300的代码。
大多数应用程序需要六位十六进制代码来表示颜色:
function RGBtoHEX(r, g, b) {
var s = (r << 16 | g << 8 | b).toString(16);
while(s.length < 6) s="0"+s;
return "#"+s;
}
alpha << 24 | red << 16 | green << 8 | blue
- gthmb