1

下面是将 rgb 转换为十六进制颜色的函数。但这并不完全正确。使用 (0, 255, 0) (#00ff00)。它返回 ff00 ,因此它不是有效的颜色。我需要帮助来修改它以返回正确的十六进制值。

function rgbToHex(r, g, b) {
        var rgb = b | (g << 8) | (r << 16);
        return rgb.toString(16);
    }
4

7 回答 7

8

这个怎么样:

//...
return (0x1000000 | rgb).toString(16).substring(1);
于 2012-07-27T08:21:01.940 回答
3

试试这个:

return ("000000"+rgb.toString(16)).slice(-6);
//                                   ^----returns last 6 chars
于 2012-07-27T08:24:35.407 回答
1
return ((b | g << 8 | r << 16) / 16777216).toString(16).substring(2);

或者

return ((b | g << 8 | r << 16) / 0x1000000).toString(16).substring(2);
于 2012-07-27T08:26:21.410 回答
0

免责声明:我是下面提到的 pusher.color 库的作者。

如果您不介意使用库,您可能想尝试使用pusher.colorxcolor 之类的库。我注意到您在 Stackoverflow 上提出了一些关于 Javascript 中的颜色操作的问题,因此这可能会为您节省一些总体时间来使用库来解决您的问题。您想要的 pusher.color 语法是:

var hexString = pusher.color('rgb', r, g, b).hex6();
于 2012-08-04T16:39:40.900 回答
0

只是另一种选择

function rgbToHex(r, g, b) {
    function c(v) {
        var hex = v.toString(16);
        return hex.length === 1 ? "0" + hex : hex;
    }
    return "#" + c(r) + c(g) + c(b);
}
于 2016-08-19T13:26:28.627 回答
0

如何使用像xolor 库这样的库

var color = xolor([45, 100, 200])
color.rgb // "rgb(45,100,200)"
color.hex // "2D64C8"
color.hsl // {h: 219, s:63.3, l:48.0}
color.hsv // {h: 218.7, s:0.7750, v:0.7843}
color.name // "royalblue"
于 2017-01-17T06:08:44.463 回答
-2

这个怎么样:

return $.sprintf("#%02x%02x%02x", r, g, b);

为此,您需要使用 jQuery。

于 2012-07-27T08:29:00.190 回答