Пример #1
0
static inline void HSL_2_RGB(const float *HSL, float *RGB)
{
  float H = HSL[0];
  float S = HSL[1];
  float L = HSL[2];

  float var_1, var_2;

  if(S < 1e-6f)
  {
    RGB[0] = RGB[1] = RGB[2] = L;
  }
  else
  {
    if(L < 0.5f)
      var_2 = L * (1.0f + S);
    else
      var_2 = (L + S) - (S * L);

    var_1 = 2.0f * L - var_2;

    RGB[0] = Hue_2_RGB(var_1, var_2, H + (1.0f / 3.0f));
    RGB[1] = Hue_2_RGB(var_1, var_2, H);
    RGB[2] = Hue_2_RGB(var_1, var_2, H - (1.0f / 3.0f));
  }
}
Пример #2
0
void HSL(float H, float S, float L, float& Rval, float& Gval, float& Bval)
{
  if (H < 0) {H = 0;}
  else if (H > 1) {
    while (H>1) {H = H - 1;}
  }
  if (S < 0) {S = 0;}
  else if (S > 1) {S = 1;}
  float var_1;
  float var_2;
  float Hu=H+.33;
  float Hd=H-.33;
  if ( S == 0 )                       //HSL from 0 to 1
  {
     Rval = L * 255;                      //RGB results from 0 to 255
     Gval = L * 255;
     Bval = L * 255;
  }
  else
  {
     if ( L < 0.5 ) 
       var_2 = L * ( 1 + S );
     else           
       var_2 = ( L + S ) - ( S * L );
 
     var_1 = 2 * L - var_2;
 
     Rval = round(255 * Hue_2_RGB( var_1, var_2, Hu ));
//     Serial.print("Rval:");
//     Serial.println(Hue_2_RGB( var_1, var_2, Hu ));
     Gval = round(255 * Hue_2_RGB( var_1, var_2, H ));
     Bval = round(255 * Hue_2_RGB( var_1, var_2, Hd ));
  }
 
}
Пример #3
0
int CRotate::HSLtoRGB(double h, double s, double l, double* r, double* g, double* b)
{
  double v1, v2;

  if ( s == 0 )                       // HSL values = From 0 to 1
  {
     *r = l ;                     // RGB results = From 0 to 1
     *g = l ;
     *b = l ;
  }
  else
  {
     if ( l < 0.5 ) 
       v2 = l * ( 1 + s );
     else           
       v2 = ( l + s ) - ( s * l );

     v1 = 2 * l - v2;

     *r = Hue_2_RGB( v1, v2, h + ( 1.0/3.0 ) );
     *g =  Hue_2_RGB( v1, v2, h );
     *b =  Hue_2_RGB( v1, v2, h - ( 1.0/3.0 ) );
  } 

  return 1;

}
Пример #4
0
t_rgba hsla_to_rgba(t_hsla color)
{
    float var1, var2;
    t_rgba ncolor;
    if(color.saturation == 0.f)
    {
        ncolor.red = color.lightness;
        ncolor.green = color.lightness;
        ncolor.blue = color.lightness;
    }
    else
    {
        if(color.lightness < 0.5f)
            var2 = color.lightness * (1.f + color.saturation);
        else
            var2 = (color.lightness + color.saturation) - (color.saturation * color.lightness);
        
        var1 = 2.f * color.lightness - var2;
        
        ncolor.red = Hue_2_RGB(var1, var2, color.hue + (1.f / 3.f));
        ncolor.green = Hue_2_RGB(var1, var2, color.hue);
        ncolor.blue = Hue_2_RGB(var1, var2, color.hue - (1.f / 3.f));
    }
    
    ncolor.alpha = color.alpha;
    return ncolor;
}
Пример #5
0
// documented in /docs/sdk/script/fn
global func HSL2RGB(int hsl)
{
	var hue = GetRGBaValue(hsl, 1), sat = GetRGBaValue(hsl, 2), lightness = GetRGBaValue(hsl, 3);
	var red, green, blue;
	var var1, var2;
	
	if (sat == 0)
	{
		red = green = blue = lightness;
	}
	else
	{
		if (lightness < 128)
			var2 = lightness * (255 + sat) / 255;
		else
			var2 = lightness + sat - lightness * sat / 255;
			
		var1 = 2 * lightness - var2;
			
		red = Hue_2_RGB(var1, var2, hue + 85);
		green = Hue_2_RGB(var1, var2, hue);
		blue = Hue_2_RGB(var1, var2, hue - 85);
	}
	
	return RGB(red, green, blue);
}
Пример #6
0
static void HSL_2_RGB(float h, float s, float l, float *r, float *g, float *b)
{
    if ( s == 0 ) {                     //HSL from 0 to 1
        *r = l * 255.0;                      //RGB results from 0 to 255
        *g = l * 255.0;
        *b = l * 255.0;
    } else {
        float var_2;
        if ( l < 0.5 ) var_2 = l * ( 1.0 + s );
        else           var_2 = ( l + s ) - ( s * l );

        float var_1 = 2.0 * l - var_2;

        *r = 255.0 * Hue_2_RGB( var_1, var_2, h + ( 1.0 / 3.0 ) );
        *g = 255.0 * Hue_2_RGB( var_1, var_2, h );
        *b = 255.0 * Hue_2_RGB( var_1, var_2, h - ( 1.0 / 3.0 ) );
    }
}
Пример #7
0
/**
 * HSL to RGB.
 */
Color HSL2RGB(ColorHSL col) {
	Color ncol(0, 0, 0, 0);
	if (col.s == 0) {
		ncol.red = (unsigned char)(col.l * 255);
		ncol.green = (unsigned char)(col.l * 255);
		ncol.blue = (unsigned char)(col.l * 255);
	} else {
		double v1, v2;
		if (col.l < 0.5) {
			v2 = col.l * (1 + col.s);
		} else {
			v2 = (col.l + col.s) - (col.s * col.l);
		}
		v1 = 2 * col.l - v2;
		ncol.red = (unsigned char)(255 * Hue_2_RGB(v1, v2, col.h + (1.0 / 3)));
		ncol.green = (unsigned char)(255 * Hue_2_RGB(v1, v2, col.h));
		ncol.blue = (unsigned char)(255 * Hue_2_RGB(v1, v2, col.h - (1.0 / 3)));
	}
	return ncol;
}