Как перевести из 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, время: 19:46. |