Тема: Из RGB в HSB
Показать сообщение отдельно
  #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 из разных источников, все не работает.
Подскажите, где ошибка в этом коде?
Ответить с цитированием