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)); } }
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 )); } }
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; }
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; }
// 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); }
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 ) ); } }
/** * 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; }