www.pudn.com > CG2Programs.rar > hsv2rgb.c
/* hsv2Rgb, Chapter 15, p 578-9 */ /* EXAMPLE STARTS HERE */ #include/* Input: h, s, v in range [0..1] Outputs: r, g, b in range [0..1] */ void hsvToRgb (float h, float s, float v, float * r, float * g, float * b) { int i; float aa, bb, cc, f; if (s == 0) /* Grayscale */ *r = *g = *b = v; else { if (h == 1.0) h = 0; h *= 6.0; i = ffloor (h); f = h - i; aa = v * (1 - s); bb = v * (1 - (s * f)); cc = v * (1 - (s * (1 - f))); switch (i) { case 0: *r = v; *g = cc; *b = aa; break; case 1: *r = bb; *g = v; *b = aa; break; case 2: *r = aa; *g = v; *b = cc; break; case 3: *r = aa; *g = bb; *b = v; break; case 4: *r = cc; *g = aa; *b = v; break; case 5: *r = v; *g = aa; *b = bb; break; } } } /* EXAMPLE ENDS HERE */ #define N_COLORS 6 void main () { char * colorNames[] = { "red", "green", "blue", "cyan", "magenta", "yellow" }; float hsv[][3] = { 0.000, 1.00, 1.00, 0.333, 1.00, 1.00, 0.676, 1.00, 1.00, 0.500, 1.00, 1.00, 0.833, 1.00, 1.00, 0.167, 1.00, 1.00 }; float r, g, b; int i; for (i=0; i