19,469
社区成员
发帖
与我相关
我的任务
分享
void CHSV_Fusion::RGBtoHSV( float r, float g, float b, float *h, float *s, float *v )
{
float min, max, delta;
min = min( r, g, b );
max = max( r, g, b );
*v = max; // v
delta = max - min;
if( max != 0 )
*s = delta / max; // s
else
{
// r = g = b = 0 // s = 0, v is undefined
*s = 0;
*h = -1;
return;
}
if( r == max )
*h = ( g - b ) / delta; // between yellow & magenta
else if( g == max )
*h = 2 + ( b - r ) / delta; // between cyan & yellow
else
*h = 4 + ( r - g ) / delta; // between magenta & cyan
*h *= 60; // degrees
if( *h < 0 )
*h += 360;
}