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

📄 hsvrgb.txt

📁 一段HSV、RGB相互转换的代码
💻 TXT
字号:
找到一段HSV、RGB相互转换的代码,看来应该是简化算法。 
// r,g,b values are from 0 to 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;    // 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; 
} 
void HSVtoRGB( float *r, float *g, float *b, float h, float s, float v ) 
{ 
 int i; 
 float f, p, q, t; 
 if( s == 0 ) { 
  // achromatic (grey) 
  *r = *g = *b = v; 
  return; 
 } 
 h /= 60;   // sector 0 to 5 
 i = floor( h ); 
 f = h - i;   // factorial part of h 
 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:  // case 5: 
   *r = v; 
   *g = p; 
   *b = q; 
   break; 
 } 
} 
 

⌨️ 快捷键说明

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