Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как перевести из RGB в HEX (https://javascript.ru/forum/misc/19028-kak-perevesti-iz-rgb-v-hex.html)

Telnet 23.07.2011 18:20

Как перевести из RGB в HEX
 
Нашел функцию
function rgbToHex (r, g, b)
    {  
        r = r.toString(16);
        g = g.toString(16);
        b = b.toString(16);
        
        if (r.length == 1) r = '0' + r;
        if (g.length == 1) g = '0' + g;
        if (b.length == 1) b = '0' + b;
        
        return (r + g + b).toUpperCase();
    }
var Hex = rgbToHex (128, 128, 128);
alert(Hex);

Но подставлять в нее нужно 3 числа, а у меня есть такое вот значение rgb(0, 255, 0)
Метод color.toString выдает function
toString() {
[native code]
}

B@rmaley.e><e 23.07.2011 18:24

А что, это не 3 числа?
Цитата:

Сообщение от Telnet
0, 255, 0


Telnet 23.07.2011 18:28

Если сразу передать

rgbToHex (rgb(0, 255, 0))

r = r.toString(16); то на эту строку ругается
Не удалось получить значение свойства "toString": значением объекта является NULL или он не определен

Telnet 23.07.2011 18:50

Нашел другую нормально работающую функцию
function getHexRGBColor(color)
{
  color = color.replace(/\s/g,"");
  var aRGB = color.match(/^rgb\((\d{1,3}[%]?),(\d{1,3}[%]?),(\d{1,3}[%]?)\)$/i);

  if(aRGB)
  {
    color = '';
    for (var i=1;  i<=3; i++) color += Math.round((aRGB[i][aRGB[i].length-1]=="%"?2.55:1)*parseInt(aRGB[i])).toString(16).replace(/^(.)$/,'0$1');
  }
  else color = color.replace(/^#?([\da-f])([\da-f])([\da-f])$/i, '$1$1$2$2$3$3');
  
  return color;
}
var RBG="rgb(0, 255, 0)";
alert( getHexRGBColor(RBG));

B@rmaley.e><e 23.07.2011 19:26

Цитата:

Сообщение от Telnet
rgbToHex (rgb(0, 255, 0))

Феерический бред. Вы сами сказали в первом сообщении, что в функцию
Цитата:

Сообщение от Telnet
подставлять в нее нужно 3 числа

а подставляете не числа, а нечто непонятное (вызов необъявленной функции, которая даже если бы и была объявлена, не смогла бы вернуть больше одного значения).

Solovei95 24.07.2011 05:54

dec2hex = function(d){
if(d>15)
{return d.toString(16)} else
{return "0"+d.toString(16)}
}
rgb = function(r,g,b){return "#"+dec2hex(r)+dec2hex(g)+dec2hex(b)};

Жертвую своими функциями!

NiOl 21.06.2019 20:57

Эк, все усложнили!
Понятное дело, если нужно корректно генерить строки вида "#04F" вместь "#0044FF", то да, нужно дополнительные проверки, но если достаточно получать только длинную строку, и без проверки входных данных R/G/B на соответствие диапазону 0..255, и если не обращать внимания, что функция toString() универсальная, т.е. вычисления могли бы быть быстрее, то вот простой пример:

function rgb(r,g,b) {return '#'+(0x1000000+(r<<16)+(g<<8)+b).toString(16).substring(1);}


Часовой пояс GMT +3, время: 19:46.