Pour obtenir une couleur en RGBA, on peut vouloir manipuler la teinte, la saturation ou la luminosité de la couleur qu'on souhaite obtenir, comme proposé dans le logiciel Paint.
/*----------------------------------------*/ // Part of program by Timidouveg // Inspired by http://www.easyrgb.com /*----------------------------------------*/ /*------------------------------------------------------------------------*/ // Construct and Re turn a color from its 4 HSLA components // // \param H : Hue component (0 .. 240) // \param G : Saturation component (0 .. 240) // \param B : Luminosity component (0 .. 240) // \param A : Alpha component (0 .. 255) (255 by default) // /*------------------------------------------------------------------------*/ sf::Color HSLtoRGB(sf::Uint8 H, sf::Uint8 S, sf::Uint8 L, sf::Uint8 A = 255); /*------------------------------------------------------------------------*/ // Convert a hue value in colors component // /*------------------------------------------------------------------------*/ float HueToRGB(float v1, float v2, float H);
/*----------------------------------------*/ // Part of program by Timidouveg // Inspired by http://www.easyrgb.com /*----------------------------------------*/ // Headers #include "HSLAtoRGBA.hpp" sf::Color HSLtoRGB(sf::Uint8 H, sf::Uint8 S, sf::Uint8 L, sf::Uint8 A) { float h, s, l; float var1, var2; sf::Color Col; // HSL from 0 to 1 if(H>240) h=1.f; else h=float(H)/240; if(S>240) s=1.f; else s=float(S)/240; if(L>240) l=1.f; else l=float(L)/240; if ( s == 0.f ) { Col.r = sf::Uint8(l * 255); Col.g = sf::Uint8(l * 255); Col.b = sf::Uint8(l * 255); Col.a = A; } else { if ( l < 0.5f ) var2 = l*(1.f+s); else var2 = (l+s)-(s*l); var1 = 2*l - var2; Col.r = sf::Uint8(255 * HueToRGB( var1, var2, h+1.f/3 )); Col.g = sf::Uint8(255 * HueToRGB( var1, var2, h )); Col.b = sf::Uint8(255 * HueToRGB( var1, var2, h-1.f/3 )); Col.a = A; } return Col; } float HueToRGB(float v1, float v2, float H) { if ( H < 0.f ) H+=1.f; if ( H > 1.f ) H-=1.f; if ( 6*H < 1.f ) return ( v1+(v2-v1)*6*H ); if ( 2*H < 1.f ) return ( v2 ); if ( 3*H < 2.f ) return ( v1+(v2-v1)*6*(2.f/3-H) ); return ( v1 ); }
J'espère que cela vous sera utile