Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.12.2014, 02:42
Аспирант
Отправить личное сообщение для ВэйДлин Посмотреть профиль Найти все сообщения от ВэйДлин
 
Регистрация: 07.04.2010
Сообщений: 72

Из RGB в HSB
Не могу найти работающее решение, они все не на JS, так что я переписывал функции.
Попробовал это
function RGBtoHSB(RGB_r, RGB_g, RGB_b){
	var Min, Max, D, H;
	Max = (RGB_r > RGB_g) ? ((RGB_r > RGB_b) ? RGB_r : RGB_b) : ((RGB_g > RGB_b) ? RGB_g : RGB_b);
	Min = (RGB_r < RGB_g) ? ((RGB_r < RGB_b) ? RGB_r : RGB_b) : ((RGB_g < RGB_b) ? RGB_g : RGB_b);
	if(Min == Max) {
		HSB_h = 0;
		HSB_s = 0;
		HSB_b = Max / 255;
	} else {
		if(RGB_r == Min) {
			D = RGB_g - RGB_b;
			H = 3;
		} else {
			if(RGB_g == Min) {
				D = RGB_b - RGB_r;
				H = 5;
			} else {
				D = RGB_r - RGB_g;
				H = 1;
			}
		}
		HSB_h = (H - (D / (Max - Min))) / 6;
		HSB_s = (Max - Min) / Max;
		HSB_b = Max / 255;
	}
	HSB_h = HSB_h * 360;
	if(HSB_h == 360) {
		HSB_h = 0;
	}
	HSB_h *= 100;
	HSB_s *= 100;
	HSB_b *= 100;
  alert(HSB_h + ' - ' + HSB_s + ' - ' + HSB_b);
}
RGBtoHSB(127, 212, 255);

И это
function max(a, b){ return a > b ? a : b; }
function min(a, b){ return a < b ? a : b; }
function RGBtoHSB(RGB_r, RGB_g, RGB_b){
    var HSB_h, HSB_s, HSB_b;
    var r = RGB_r / 255.0;
    var g = RGB_g / 255.0;
    var b = RGB_b / 255.0;
    var maxf = max(max(r, g), b);
    var minf = min(min(r, g), b);
    var delta = maxf - minf;
    if (delta != 0){
        var hue;
        if (r == maxf){
            hue = (g - b) / delta;
        }else{
            if (g == maxf){
                hue = 2 + (b - r) / delta;
            }else{
                hue = 4 + (r - g) / delta;
            }
        }
        hue *= 60;
        if (hue < 0){ hue += 360; }
        HSB_h = hue;
    }else{
        HSB_h = 0;
    }
    HSB_s = maxf == 0 ? 0 : (maxf - minf) / maxf;
    HSB_b = maxf;
	  alert(HSB_h + ' - ' + HSB_s + ' - ' + HSB_b);
}
RGBtoHSB(127, 212, 255);

И ещё решений 5-7 из разных источников, все не работает.
Подскажите, где ошибка в этом коде?
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2014, 03:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

ВэйДлин,
а какой результат должен быть RGBtoHSB(127, 212, 255);
Ответить с цитированием
  #3 (permalink)  
Старый 09.12.2014, 03:37
Аспирант
Отправить личное сообщение для ВэйДлин Посмотреть профиль Найти все сообщения от ВэйДлин
 
Регистрация: 07.04.2010
Сообщений: 72

200, 50, 100
Изображения:
Тип файла: jpg 2014-12-09 03-36-44 Скриншот экрана.jpg (18.0 Кб, 3 просмотров)
Ответить с цитированием
  #4 (permalink)  
Старый 09.12.2014, 03:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

ВэйДлин,
с инета
function rgb2hsv(d, e, f) {
    var h, b;
    d /= 255;
    e /= 255;
    var g = f / 255,
        a, k, c = Math.max(d, e, g);
    b = c - Math.min(d, e, g);
    0 == b ? a = k = 0 : (k = b / c, f = (c - d) / 6 / b + .5, h = (c - e) / 6 / b + .5, b = (c - g) / 6 / b + .5, d === c ? a = b - h : e === c ? a = 1 / 3 + f - b : g === c && (a = 2 / 3 + h - f), 0 > a ? a += 1 : 1 < a && --a);
    return [Math.round(360 * a), Math.round(100 * k), Math.round(100 * c)]
};
alert( rgb2hsv(127, 212, 255) );
Ответить с цитированием
  #5 (permalink)  
Старый 09.12.2014, 04:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

ВэйДлин,
да и ваш код вполне рабочий с поправкой
function RGBtoHSB(RGB_r, RGB_g, RGB_b){
	var Min, Max, D, H;
	Max = (RGB_r > RGB_g) ? ((RGB_r > RGB_b) ? RGB_r : RGB_b) : ((RGB_g > RGB_b) ? RGB_g : RGB_b);
	Min = (RGB_r < RGB_g) ? ((RGB_r < RGB_b) ? RGB_r : RGB_b) : ((RGB_g < RGB_b) ? RGB_g : RGB_b);
	if(Min == Max) {
		HSB_h = 0;
		HSB_s = 0;
		HSB_b = Max / 255;
	} else {
		if(RGB_r == Min) {
			D = RGB_g - RGB_b;
			H = 3;
		} else {
			if(RGB_g == Min) {
				D = RGB_b - RGB_r;
				H = 5;
			} else {
				D = RGB_r - RGB_g;
				H = 1;
			}
		}
		HSB_h = (H - (D / (Max - Min))) / 6;
		HSB_s = (Max - Min) / Max;
		HSB_b = Max / 255;
	}
	HSB_h = HSB_h * 360;
	if(HSB_h == 360) {
		HSB_h = 0;
	}
	//HSB_h *= 100;
	HSB_s *= 100;
	HSB_b *= 100;
  alert(Math.round(HSB_h) + ' - ' + Math.round(HSB_s) + ' - ' +Math.round( HSB_b));
}
RGBtoHSB(127, 212, 255);
Ответить с цитированием
  #6 (permalink)  
Старый 09.12.2014, 06:01
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,586

Откудыть вообще этот код, написанный наркоманами не знающими о базовых математических функциях js типа Math.min\max?
__________________
29375, 35
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перевести из RGB в HEX Telnet Общие вопросы Javascript 6 21.06.2019 20:57
Настройка под rgb Color Picker jQuery Plugin nevai jQuery 1 22.02.2014 15:14
перевод из HSB в RGB cyber Events/DOM/Window 15 28.05.2012 23:23
Как пользоваться этим плагином?, color picker, получить из него rgb nikki4 jQuery 3 04.04.2012 11:33