Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中将十六进制颜色转换为整数_Javascript_Colors - Fatal编程技术网

在javascript中将十六进制颜色转换为整数

在javascript中将十六进制颜色转换为整数,javascript,colors,Javascript,Colors,我正在尝试在javascript中将十六进制颜色字符串转换为int 颜色int必须与VB6的格式相同。我认为字节的顺序不正常。例:255为红色(#ff0000),16776960为浅绿色(#00ffff) 我有一个函数可以做相反的事情:(但是评论中有人告诉我这是不正确的) 但无法编写返回初始值的函数 你能帮我吗 编辑: 我通过填充每个单独的颜色更正了我的原始函数: function VBColorToHEX(i) { var r = (i & 0xFF).toString(16);

我正在尝试在javascript中将十六进制颜色字符串转换为int

颜色int必须与VB6的格式相同。我认为字节的顺序不正常。例:255为红色(#ff0000),16776960为浅绿色(#00ffff)

我有一个函数可以做相反的事情:(但是评论中有人告诉我这是不正确的)

但无法编写返回初始值的函数

你能帮我吗

编辑:

我通过填充每个单独的颜色更正了我的原始函数:

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;
}
您使用零填充结果,而不是填充每个颜色值。 例如,如果i=657930,字符串十六进制值类似于#0a0a,但您将输出#AAA000

此外,如果要提取4个颜色通道,则需要8个字符,而不是6个字符


关于填充,请参见示例。

这里是原始函数的一个工作版本,我认为这对您了解它的实际工作方式更有意义

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);
}

让VB6告诉您纯红色、绿色和蓝色的颜色编号。那么您需要哪些字节就很明显了。对于任何想知道VB6颜色格式是
&H00BBGGRR&
的人来说,我认为您的函数VBColorToHEX是不正确的。VBColorToHEX(1)返回#100000,但似乎应该返回#010000。颜色看起来正确,但正如您所说,某些值可能是错误的。我应该做哪些更改?您是否只想选择一个十六进制,如0xFF并获取相关的Int?您的VBColorToHEX版本不起作用,生成的颜色与我的VB应用程序中设置的颜色非常不同。@Xasun,我不确定您为什么这么说,因为它适用于您给出的两个示例“255是红色(#ff0000)和16776960是浅绿色”(#00ffff)”。你能给出一个它不起作用的例子吗?我的错,我用字符串中的“255”错误测试了你的函数。你的解决方案起作用了。
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);
}