Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2011, 18:20
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 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]
}
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2011, 18:24
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

А что, это не 3 числа?
Сообщение от Telnet
0, 255, 0
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2011, 18:28
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

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

rgbToHex (rgb(0, 255, 0))

r = r.toString(16); то на эту строку ругается
Не удалось получить значение свойства "toString": значением объекта является NULL или он не определен
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2011, 18:50
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 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));
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2011, 19:26
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от Telnet
rgbToHex (rgb(0, 255, 0))
Феерический бред. Вы сами сказали в первом сообщении, что в функцию
Сообщение от Telnet
подставлять в нее нужно 3 числа
а подставляете не числа, а нечто непонятное (вызов необъявленной функции, которая даже если бы и была объявлена, не смогла бы вернуть больше одного значения).
Ответить с цитированием
  #6 (permalink)  
Старый 24.07.2011, 05:54
Профессор
Посмотреть профиль Найти все сообщения от Solovei95
 
Регистрация: 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)};

Жертвую своими функциями!
Ответить с цитированием
  #7 (permalink)  
Старый 21.06.2019, 20:57
Интересующийся
Отправить личное сообщение для NiOl Посмотреть профиль Найти все сообщения от NiOl
 
Регистрация: 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);}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
While как условные выражения Latro Общие вопросы Javascript 23 27.06.2010 14:53
как перевести дату чтоб выполнить отбор в MYSql ?? Arfey Серверные языки и технологии 7 10.06.2010 09:23
Как сделать такое fancy menu uonax Элементы интерфейса 2 22.05.2010 12:52
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
как можно создать iframe со скриптами GOll Общие вопросы Javascript 2 05.05.2009 11:32