function(r, g, b)
r = r / 255;
g = g / 255;
b = b / 255;
var minv = Math.min(r, g, b);
var maxv = Math.max(r, g, b);
var d = maxv - minv;
var v = maxv;
if(d == 0)
var h = 0;
var s = 0;
s = d / maxv;
var dr = ((maxv - r) / 6 + (d / 2)) / d;
var dg = ((maxv - g) / 6 + (d / 2)) / d;
var db = ((maxv - b) / 6 + (d / 2)) / d;
h = r == maxv ? db - dg : g == maxv ? (1 / 3) + dr - db : b == maxv ? (2 / 3) + dg - dr : 0;
h = h < 0 ? h += 1 : h > 1 ? h -= 1 : h;
h = Math.round(h * 360);
s = Math.round(s * 100);
v = Math.round(v * 100);
return "[" + h + ", " + s + ", " + v + "]";
It's quite long, longer than I'd like... My only way to shrink it was to take 3 if's and make them into a nested inline if, which I am still kinda amused that it works. Any ideas?
Last edited by TheCowGoesMoo; 06-26-2009 at 03:49 PM.
Reason: more random tabs?
The assignment to h is redundant and the expression could be written:
It's hazardous to declare variables within conditional blocks, since it can lead to referencing of non existent variables later in the function, or as demonstrated here:
In the else block, s is made global.
It would help if you'd explain the purpose of the function.
It's actually a function defined as $.fn.rgb2hsv = function ...