2013-04-11 2 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

2

Вместо 255 - parseInt(colors[i]) оно должно быть parseInt(colors[i]).

В вашей текущей реализации - если красный - 0, 255 - 0 = 255, в шестнадцатеричном виде - FF.

Смежные вопросы