Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include<mitkColorConversions.h>
00019
00020 namespace mitk {
00021
00022 namespace ColorConversions {
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 void Hsv2Rgb(float h, float s, float v, float& r, float& g, float& b)
00034 {
00035 if (s == 0.0)
00036 {
00037 r = g = b = v;
00038 return;
00039 }
00040
00041 int Hi = (int)( h / 60.0 ) % 6;
00042 if (h >= 360 ) Hi = 6;
00043
00044 float f = (float)(h / 60.0 - (float)Hi);
00045 float p = (float)(v * (1.0 - s));
00046 float q = (float)(v * (1.0 - s * f));
00047 float t = (float)(v * (1.0 - s * (1.0 - f)));
00048
00049 switch (Hi)
00050 {
00051 case 0: case 6: r = v; g = t; b = p; break;
00052 case 1: r = q; g = v; b = p; break;
00053 case 2: r = p; g = v; b = t; break;
00054 case 3: r = p; g = q; b = v; break;
00055 case 4: r = t; g = p; b = v; break;
00056 case 5: r = v; g = p; b = q; break;
00057 }
00058 }
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 void Rgb2Hsv(float r, float g, float b, float &h, float &s, float &v)
00071 {
00072
00073
00074
00075
00076 float mn=r,mx=r;
00077 int maxVal=0;
00078
00079 if (g > mx){ mx=g;maxVal=1;}
00080 if (b > mx){ mx=b;maxVal=2;}
00081 if (g < mn) mn=g;
00082 if (b < mn) mn=b;
00083
00084 float delta = mx - mn;
00085
00086 v = mx;
00087 if( mx != 0 )
00088 s = delta / mx;
00089 else
00090 {
00091 s = 0;
00092 h = 0;
00093 return;
00094 }
00095 if (s==0.0f)
00096 {
00097 h=-1;
00098 return;
00099 }
00100 else
00101 {
00102 switch (maxVal)
00103 {
00104 case 0:{h = ( g - b ) / delta;break;}
00105 case 1:{h = 2 + ( b - r ) / delta;break;}
00106 case 2:{h = 4 + ( r - g ) / delta;break;}
00107 }
00108 }
00109
00110 h *= 60;
00111 if( h < 0 ) h += 360;
00112 }
00113
00114 }
00115
00116 }
00117