繁体   English   中英

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

[英]Convert hexadecimal color to integer in javascript

我正在尝试将十六进制颜色字符串转换为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;
}

这是原始功能的工作版本,我认为这对您实际的工作方式更有意义。

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);
}
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,例如参见此解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM