Forum Programmation.autre changement d'espace de couleur

Posté par  .
Étiquettes : aucune
0
14
sept.
2004
Je souhaiterais assombrir des couleurs définie en rgb et donc pour ça, je souhaiterais passer en tsl (teinte saturation luminosité) afin de baisser la luminosité

pour ensuite repassé en coordonnées rgb

j'ai trouvé cette page http://www.ipt.univ-paris8.fr/~chan/colori.html#changement(...)
mais les formules me donne des résultats faux :/

sur quel espace de valeur doit être le rgb ? je part sur des valeurs entre 0 et 256 pour chaque couleur ...

si quelqu'un à déjà fait ça ... a votre bon coeur ....


Dam
  • # 255

    Posté par  (site web personnel) . Évalué à 2.

    C'est de 0 à 255, soit 256 valeurs possibles ( 2 puissance 8)
  • # en javascript?

    Posté par  . Évalué à 1.

    j'ai trouvé ca sur http://javascriptfr.com/code.aspx?ID=17130(...)
    en cherchant rgb2hsl via mon ami google :)


    / JScript source code
    //Red : 0..255
    //Green : 0..255
    //Blue : 0..255
    //Hue : 0,0..360,0<=>0..255
    //Lum : 0,0..1,0<=>0..255
    //Sat : 0,0..1,0<=>0..255

    //Retourne un tableau de 3 valeurs : H,S,L
    function RGB2HSL (r, g, b)
    {
    red = Math.round (r);
    green = Math.round (g);
    blue = Math.round (b);
    var minval = Math.min (red, Math.min (green, blue));
    var maxval = Math.max (red, Math.max (green, blue));
    var mdiff = maxval - minval + 0.0;
    var msum = maxval + minval + 0.0;
    var luminance = msum / 510.0;
    var saturation;
    var hue;
    if (maxval == minval)
    {
    saturation = 0.0;
    hue = 0.0;
    }
    else
    {
    var rnorm = (maxval - red) / mdiff;
    var gnorm = (maxval - green) / mdiff;
    var bnorm = (maxval - blue) / mdiff;
    saturation = (luminance <= 0.5) ? (mdiff / msum) : (mdiff / (510.0 - msum));
    if (red == maxval)
    hue = 60.0 * (6.0 + bnorm - gnorm);
    if (green == maxval)
    hue = 60.0 * (2.0 + rnorm - bnorm);
    if (blue == maxval)
    hue = 60.0 * (4.0 + gnorm - rnorm);
    if (hue > 360.0)
    hue -= 360.0;
    }
    return new Array (Math.round (hue * 255.0 / 360.0), Math.round (saturation * 255.0), Math.round (luminance * 255.0));
    }

    function Magic (rm1, rm2, rh)
    {
    var retval = rm1;
    if (rh > 360.0)
    rh -= 360.0;
    if (rh < 0.0)
    rh += 360.0;
    if (rh < 60.0)
    retval = rm1 + (rm2 - rm1) * rh / 60.0;
    else if (rh < 180.0)
    retval = rm2;
    else if (rh < 240.0)
    retval = rm1 + (rm2 - rm1) * (240.0 - rh) / 60.0;
    return Math.round (retval * 255);
    }

    //Retourne un tableau de 3 valeurs : R,G,B
    function HSL2RGB (h, s, l)
    {
    var hue = h * 360.0 / 255.0;
    var saturation = s / 255.0;
    var luminance = l / 255.0;
    var red;
    var green;
    var blue;
    if (saturation == 0.0)
    {
    red = green = blue = Math.round (luminance * 255.0);
    }
    else
    {
    var rm1;
    var rm2;
    if (luminance <= 0.5)
    rm2 = luminance + luminance * saturation;
    else
    rm2 = luminance + saturation - luminance * saturation;
    rm1 = 2.0 * luminance - rm2;
    red = Magic (rm1, rm2, hue + 120.0);
    green = Magic (rm1, rm2, hue);
    blue = Magic (rm1, rm2, hue - 120.0);
    }
    return new Array (red, green, blue);
    }
  • # en javascript?

    Posté par  . Évalué à 1.

    j'ai trouvé ca sur http://javascriptfr.com/code.aspx?ID=17130(...) en cherchant rgb2hsl via mon ami google :)
    / JScript source code
    //Red : 0..255
    //Green : 0..255
    //Blue : 0..255
    //Hue : 0,0..360,0<=>0..255
    //Lum : 0,0..1,0<=>0..255
    //Sat : 0,0..1,0<=>0..255
    
    //Retourne un tableau de 3 valeurs : H,S,L
    function RGB2HSL (r, g, b)
    {
      red = Math.round (r);
      green = Math.round (g);
      blue = Math.round (b);
      var minval = Math.min (red, Math.min (green, blue));
      var maxval = Math.max (red, Math.max (green, blue));
      var mdiff = maxval - minval + 0.0;
      var msum = maxval + minval + 0.0;
      var luminance = msum / 510.0;
      var saturation;
      var hue;
      if (maxval == minval)
      {
        saturation = 0.0;
        hue = 0.0;
      }
      else
      {
        var rnorm = (maxval - red) / mdiff;
        var gnorm = (maxval - green) / mdiff;
        var bnorm = (maxval - blue) / mdiff;
        saturation = (luminance <= 0.5) ? (mdiff / msum) : (mdiff / (510.0 - msum));
        if (red == maxval)
          hue = 60.0 * (6.0 + bnorm - gnorm);
        if (green == maxval)
          hue = 60.0 * (2.0 + rnorm - bnorm);
        if (blue == maxval)
          hue = 60.0 * (4.0 + gnorm - rnorm);
        if (hue > 360.0)
          hue -= 360.0;
      }
      return new Array (Math.round (hue * 255.0 / 360.0), Math.round (saturation * 255.0), Math.round (luminance * 255.0));
    }
    
    function Magic (rm1, rm2, rh)
    {
      var retval = rm1;
      if (rh > 360.0)
        rh -= 360.0;
      if (rh < 0.0)
        rh += 360.0;
      if (rh < 60.0)
        retval = rm1 + (rm2 - rm1) * rh / 60.0;
      else if (rh < 180.0)
        retval = rm2;
      else if (rh < 240.0)
        retval = rm1 + (rm2 - rm1) * (240.0 - rh) / 60.0;
      return Math.round (retval * 255);
    }
    
    //Retourne un tableau de 3 valeurs : R,G,B
    function HSL2RGB (h, s, l)
    {
      var hue = h * 360.0 / 255.0;
      var saturation = s / 255.0;
      var luminance = l / 255.0;
      var red;
      var green;
      var blue;
      if (saturation == 0.0)
      {
        red = green = blue = Math.round (luminance * 255.0);
      }
      else
      {
        var rm1;
        var rm2;
        if (luminance <= 0.5)
          rm2 = luminance + luminance * saturation;
        else
          rm2 = luminance + saturation - luminance * saturation;
        rm1 = 2.0 * luminance - rm2;
        red = Magic (rm1, rm2, hue + 120.0);
        green = Magic (rm1, rm2, hue);
        blue = Magic (rm1, rm2, hue - 120.0);
      }
      return new Array (red, green, blue);
    }
    
    • [^] # Re: en javascript?

      Posté par  . Évalué à 0.

      m'enfin j'ai bien cliqué sur 'lien suivant' moi..?!

      pis apres il me disait que y'avait pas d'autre message que le premier :/
  • # Rien a voir

    Posté par  (site web personnel) . Évalué à 0.

    Bonjour,

    Rien a voir mais juste pour mettre dans les bookmarks : http://color.twysted.net/.(...)

    Tu trouveras neanmoins les sources (qui doivent contenir ta formule) dans l'archive : http://color.twysted.net/colormatch.zip(...)
  • # Espaces ne se recouvrant pas

    Posté par  . Évalué à 1.

    Effectivement, de memoire, les espaces de couleurs ne se recouvrent pas forcement.

    Essai peut etre la conversion dans l'autre sens. Si l'un des espace est plus ou moins contenu dans l'autre (me semble que le rgb est plus petit), ca peut permettre de se faire une idee des bornes a ne pas depasser pour avoir une conversion correcte dans l'autre sens.

    Apres, je n'y connais rien au HSL, ptetre qu'il n'est pas sencé y avoir de probleme.

    Sinon, un pti lien, a savoir wikipedia :)
    http://en.wikipedia.org/wiki/HLS_color_space(...)

    Qui propose des liens en fin d'article, dont celui ci qui donne une formule assez simple :
    http://www.easyrgb.com/math.php?MATH=M19#text19(...)

    Il est tard, j'ai la flemme de chercher dans news.google.com, mais il y a forcement qqn qui a deja posé la question, donc la reponse doit y etre, ou dans une faq associée.

    Luzerne, qui va se coucher

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.