2012-07-27 141 views
1

以下是将rgb转换为十六进制颜色的功能。但这不完全正确。用(0,255,0)(#​​00ff00)。它返回ff00,所以它不是有效的颜色。我需要帮助来修改它以返回正确的十六进制值。将RGB转换为十六进制颜色

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

回答

8

如何:

//... 
return (0x1000000 | rgb).toString(16).substring(1); 
+1

哦,这是一个大块普里莫那里的奶酪...... – Malvolio 2012-07-27 08:26:44

+0

我不明白这应该怎么做所有三个值?我明白你怎么可以做'(0x100 | r)...'特别地变红。 – tybro0103 2013-10-14 18:06:52

3

试试这个:

return ("000000"+rgb.toString(16)).slice(-6); 
//         ^----returns last 6 chars 
+0

+1这实际上是一个很好的样板,可以填充任何角色! – Roman 2012-07-27 08:35:04

1
return ((b | g << 8 | r << 16)/16777216).toString(16).substring(2); 

return ((b | g << 8 | r << 16)/0x1000000).toString(16).substring(2); 
+0

太棒了! '|可能更容易理解0x1000000'而不是分割。 – tybro0103 2013-10-14 18:14:21

-2

如何:

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

为此,您需要使用jQuery。

0

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

如果你不介意使用库,你可能想尝试一个库,如pusher.colorxcolor。我注意到你已经在Stackoverflow上提出了关于JavaScript中颜色操作的几个问题,所以这可以为你节省一些时间来使用库来解决你的问题。你想要的东西的pusher.color语法是:

var hexString = pusher.color('rgb', r, g, b).hex6(); 
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); 
} 
0

如何使用图书馆像the xolor library

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"