⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rgb-hsv.cpp

📁 这个程序是由rgb转化为hsi的程序
💻 CPP
字号:
/******************************************************************************
 * 下面两个函数实现rgb和hsv的互相转换
 * r,g,b 的值在 0 到 1 之间
 * h = [0,360], s = [0,1], v = [0,1]
 * if s == 0, then h = -1 (undefined)
 *****************************************************************************/
void 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;
	delta = max - min;
	if( max != 0 )
		*s = delta / max; 
	else
	{
		// r = g = b = 0
		// s = 0, v 未定义
		*s = 0;
		*h = -1;
		return;
	}
        
	if( r == max )
		*h = ( g - b ) / delta;         // 在 yellow & magenta 之间
	else if( g == max )
		*h = 2 + ( b - r ) / delta;     // 在 cyan & yellow 之间
	else
		*h = 4 + ( r - g ) / delta;     // 在 magenta & cyan 之间
	
	*h *= 60;                               // degrees
	if( *h < 0 )
		*h += 360;
}

void HSVtoRGB( float *r, float *g, float *b, float h, float s, float v )
{
	int i;
	float f, p, q, t;
	if( s == 0 )
	{
		// 灰度
		*r = *g = *b = v;
		return;
	}
	
	h /= 60;						// 扇区 0 到 5
	i = floor( h );
	f = h - i; 
	p = v * ( 1 - s );
	q = v * ( 1 - s * f );
	t = v * ( 1 - s * ( 1 - f ) );

	switch( i ) 
	{
	case 0:
		*r = v;
		*g = t;
		*b = p;
		break;
	case 1:
		*r = q;
		*g = v;
		*b = p;
		break;
	case 2
		*r = p;
		*g = v;
		*b = t;
		break;
	case 3:
		*r = p;
		*g = q;
		*b = v;
		break;
	case 4:
		*r = t;
		*g = p;
		*b = v;
		break;
	default: 
		*r = v;
		*g = p;
		*b = q;
		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -