
23.07.2011, 18:20
|
|
Профессор
|
|
Регистрация: 21.02.2011
Сообщений: 160
|
|
|
Как перевести из 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]
}
|
|

23.07.2011, 18:24
|
 |
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
А что, это не 3 числа?
|
Сообщение от Telnet
|
|
0, 255, 0
|
|
|

23.07.2011, 18:28
|
|
Профессор
|
|
Регистрация: 21.02.2011
Сообщений: 160
|
|
Если сразу передать
rgbToHex (rgb(0, 255, 0))
r = r.toString(16); то на эту строку ругается
Не удалось получить значение свойства "toString": значением объекта является NULL или он не определен
|
|

23.07.2011, 18:50
|
|
Профессор
|
|
Регистрация: 21.02.2011
Сообщений: 160
|
|
Нашел другую нормально работающую функцию
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));
|
|

23.07.2011, 19:26
|
 |
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
|
Сообщение от Telnet
|
|
rgbToHex (rgb(0, 255, 0))
|
Феерический бред. Вы сами сказали в первом сообщении, что в функцию
|
Сообщение от Telnet
|
|
подставлять в нее нужно 3 числа
|
а подставляете не числа, а нечто непонятное (вызов необъявленной функции, которая даже если бы и была объявлена, не смогла бы вернуть больше одного значения).
|
|

24.07.2011, 05:54
|
|
Профессор
|
|
Регистрация: 15.03.2011
Сообщений: 353
|
|
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)};
Жертвую своими функциями!
|
|

21.06.2019, 20:57
|
|
Интересующийся
|
|
Регистрация: 11.06.2017
Сообщений: 15
|
|
Эк, все усложнили!
Понятное дело, если нужно корректно генерить строки вида "#04F" вместь "#0044FF", то да, нужно дополнительные проверки, но если достаточно получать только длинную строку, и без проверки входных данных R/G/B на соответствие диапазону 0..255, и если не обращать внимания, что функция toString() универсальная, т.е. вычисления могли бы быть быстрее, то вот простой пример:
function rgb(r,g,b) {return '#'+(0x1000000+(r<<16)+(g<<8)+b).toString(16).substring(1);}
|
|
|
|