Как перевести из 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] } |
А что, это не 3 числа?
Цитата:
|
Если сразу передать
rgbToHex (rgb(0, 255, 0)) r = r.toString(16); то на эту строку ругается Не удалось получить значение свойства "toString": значением объекта является NULL или он не определен |
Нашел другую нормально работающую функцию
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));
|
Цитата:
Цитата:
|
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)};
Жертвую своими функциями! |
Эк, все усложнили!
Понятное дело, если нужно корректно генерить строки вида "#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, время: 12:21. |