Не могу найти работающее решение, они все не на 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 из разных источников, все не работает.
Подскажите, где ошибка в этом коде?