//R, G, B:[0..255],integer //H:[0, 360),double, degrees around color circle //S:[0, 1], double, 0(shade of gray) to 1(pure color) //V:[0, 1], double, 0(black) to 1(white) void RGB2HSV(int R, int G, int B, double&H, double&S, double&V) ...{ int Max = max(max(R, G), B); int Min = min(min(R, G), B); int Delta = Max - Min; if(Max ==0) S =0.0; else S = (double)Delta/Max; if(abs(S)<FLT_EPSILON) H =0.0; //当S为0时,H无意义, 但可以指定为0 else ...{ if(R == Max) //yellow to magenta H =60*(G-B)/Delta; elseif(G == Max) //cyan to yellow H =120+60*(B-R)/Delta; elseif(B == Max) //magenta to cyan H =240+60*(R-G)/Delta; } if(H<0.0) H =360.0+ H; if(H>360.0) H-=360; V = Max/255.0; }