我试图在javascript中将十六进制颜色字符串转换为int。
color int必须与VB6格式相同。我认为字节不是正常的顺序。例如:255为红色(#ff0000),16776960为Aqua(#00ffff)
我有一个相反的功能:(但评论中有人告诉我它不正确)
function VBColorToHEX(i) {
var hex = (i & 0xFF).toString(16) +
((i >> 8) & 0xFF).toString(16) +
((i >> 16) & 0xFF).toString(16) +
((i >> 24) & 0xFF).toString(16);
hex += '000000';
hex = hex.substring(0, 6);
return "#" + hex;
}
但是无法写一个函数来返回我的初始值。
你能帮助我吗?
修改
我通过填充每个单独的颜色来纠正我的原始功能:
function VBColorToHEX(i) {
var r = (i & 0xFF).toString(16);
var g = ((i >> 8) & 0xFF).toString(16);
var b = ((i >> 16) & 0xFF).toString(16);
r = ('0' + r).slice(-2);
g = ('0' + g).slice(-2);
b = ('0' + b).slice(-2);
return "#" + r + g + b;
}
答案 0 :(得分:2)
这是原始功能的工作版本,我认为这对你的实际工作方式更有意义。
function VBColorToHEX(i) {
var bbggrr = ("000000" + i.toString(16)).slice(-6);
var rrggbb = bbggrr.substr(4, 2) + bbggrr.substr(2, 2) + bbggrr.substr(0, 2);
return "#" + rrggbb;
}
然后,要反过来,请执行以下操作:
function HEXToVBColor(rrggbb) {
var bbggrr = rrggbb.substr(4, 2) + rrggbb.substr(2, 2) + rrggbb.substr(0, 2);
return parseInt(bbggrr, 16);
}
答案 1 :(得分:1)
function VBColorToHEX(i) {
var hex = (i & 0xFF).toString(16) +
((i >> 8) & 0xFF).toString(16) +
((i >> 16) & 0xFF).toString(16) +
((i >> 24) & 0xFF).toString(16);
hex += '000000'; // pad result
hex = hex.substring(0, 6);
return "#" + hex;
}
您使用零填充结果,而不是填充每个颜色值。 例如,如果i = 657930,字符串十六进制值类似于#0A0A0A,但您将输出#AAA000。
此外,如果您要提取4个颜色通道,则需要8个字符,而不是6个。
用于填充的PS,例如参见this solution。