Retourner aux forums || Retourner au forum Programmation.autre
Programmation.autre : changement d'espace de couleur
Posté par Hardy Damien (page perso, ) le 14 septembre 2004pour 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
> Lire le message (6 commentaires, moyenne: 0,8).
en javascript?
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?
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?
Rien a voir
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
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
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.autre



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.