2013-04-11 99 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。