//
// COLOR SPACE CONVERTER
public class ColorSpace
{
public static void rgb2hsv(double[] rgb, double[] hsv) {
double r = rgb[0];
double g = rgb[1];
double b = rgb[2];
double max = Math.max(r,Math.max(g,b));
double min = Math.min(r,Math.min(g,b));
double range = max - min;
double v = max;
double s = range==0 ? 0 : range / max;
double h = r==max ? (g-b)/range : // yellow thru magenta
g==max ? (b-r)/range + 2 : // cyan thru yellow
(r-g)/range + 4 ; // magenta thru cyan
hsv[0] = (h < 0 ? h+6 : h) / 6;
hsv[1] = s;
hsv[2] = v;
}
public static void hsv2rgb(double[] hsv, double[] rgb) {
double h = 6 * hsv[0];
double s = hsv[1];
double v = hsv[2];
int i = (int)(h%6);
double x = v * (1 - s);
double y = v * (1 - s * (h%1));
double z = v * (1 - s * (1 - h%1));
double r=0, g=0, b=0;
switch (i) {
case 0: r = v; g = z; b = x; break;
case 1: r = y; g = v; b = x; break;
case 2: r = x; g = v; b = z; break;
case 3: r = x; g = y; b = v; break;
case 4: r = z; g = x; b = v; break;
case 5: r = v; g = x; b = y; break;
}
rgb[0] = r;
rgb[1] = g;
rgb[2] = b;
}
}