2013-04-11 130 views
2

以下this问题和许多其他问题,我试图将rgb值转换为十六进制值。将RGB转换为HEX失败

复制/粘贴最常用的和接受的答案,我做了这个脚本

function componentToHex(c) { 
      var hex = c.toString(16); 
      return hex.length == 1 ? "0" + hex : hex; 
     } 

function rgbToHex(rgb) { 

      var colors = rgb.split("(") 
      colors = colors[1].split(")") 
      colors = colors[0].split(",") 

      var r = 255 - parseInt(colors[0]) 
      var g = 255 - parseInt(colors[1]) 
      var b = 255 - parseInt(colors[2]) 

      return componentToHex(r) + componentToHex(g) + componentToHex(b); 
     } 

alert(rgbToHex("rgb(0, 51, 255)")) 

结果:

ffcc00 

预期结果:

0033ff 

为什么不加工?

回答

3

使用parseInt结果直接,不255减去值:由互补输出值(而不是等效到)

var r = parseInt(colors[0]) 
var g = parseInt(colors[1]) 
var b = parseInt(colors[2]) 

您目前制造完全相反颜色的输入值。

+0

我真的那么笨吗? '。''现在工作正常,谢谢! – Saturnix 2013-04-11 15:32:22

2

而不是255 - parseInt(colors[i]),它应该是parseInt(colors[i])

在您当前的实现中 - 如果红色是0,255-0 = 255,那么在十六进制中是FF。