HSLAtoRGBA

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.

HSLAtoRGBA.hpp

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

HSLAtoRGBA.cpp

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

 
fr/sources/hslatorgba.txt · Last modified: 2008/05/17 09:58 by Laurent
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki