www.pudn.com > CG2Programs.rar > rgb2hsv.c
/* rgb2hsv, Chapter 15, p 578 */ /* EXAMPLE STARTS HERE */ #include#define MIN(a,b) (ab?a:b) #define NO_HUE -1 /* Input: r, g, b in range [0..1] Outputs: h, s, v in range [0..1] */ void rgbToHsv (float r, float g, float b, float * h, float * s, float * v) { float max = MAX (r, MAX (g, b)), min = MIN (r, MIN (g, b)); float delta = max - min; *v = max; if (max != 0.0) *s = delta / max; else *s = 0.0; if (*s == 0.0) *h = NO_HUE; else { if (r == max) *h = (g - b) / delta; else if (g == max) *h = 2 + (b - r) / delta; else if (b == max) *h = 4 + (r - g) / delta; *h *= 60.0; if (*h < 0) *h += 360.0; *h /= 360.0; } } /* EXAMPLE ENDS HERE */ #define N_COLORS 6 void main () { char * colorNames[] = { "red", "green", "blue", "cyan", "magenta", "yellow" }; float rgb[][3] = { 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.75, 0.00, 0.00, 0.00, 0.75, 0.00, 0.00, 0.00, 0.75, 0.00, 0.75, 0.75, 0.75, 0.00, 0.75, 0.75, 0.75, 0.00, 1.00, 0.30, 0.30, 0.30, 1.00, 0.30, 0.30, 0.30, 1.00, 0.30, 1.00, 1.00, 1.00, 0.30, 1.00, 1.00, 1.00, 0.30 }; float h, s, v; int i, j; for (i=0; i