Bonjour tout le monde. Pour mon projet personnel du moment je dois convertir une couleur codée en HSL pour avoir son équivalent en RGB.
Pour cela j'ai créé 2 objets qui représente respectivement les 2 formats.
Puis pour ma conversion, je passe par le sous objet prototype pour étendre une fonction de conversion à mon objet HSL.
C'est là que le gros soucis apparait. Il semble impossible d'instancer un objet RGB à l'intérieur de cette fonction. Cependant en modifiant ma fonction, pour une raison que je ne comprend pas, j'arrive à retourner un objet RGB (voir second code plus bas).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 var RGB = function (red, green, blue){ this.red = red; this.green = green; this.blue = blue; }; RGB.prototype.toString = function(){ return 'rgb('+ this.red +', '+ this.green +', '+ this.blue +')'; } var HSL = function(hue, saturation, lightness){ this.hue = hue; this.saturation = saturation; this.lightness = lightness; }; HSL.prototype.toString = function(){ return 'hsl('+ this.hue +', '+ this.saturation +'%, '+ this.lightness +'%)'; } HSL.prototype.toRGB = function(){ var L = this.luminance / 100; var S = this.saturation / 100; var C = (1 - Math.abs(2 * L - 1)) * S; var h_prime = this.teinte / 60; var X = C * (1 - Math.abs(h_prime % 2 - 1)); var m = L - (C / 2); if(h_prime <= 0 && h_prime < 1){ var RGB = new RGB(C, X, 0); } else if(h_prime <= 1 && h_prime < 2){ var RGB = new RGB(X, C, 0); } else if(h_prime <= 2 && h_prime < 3){ var RGB = new RGB(0, C, X); } else if(h_prime <= 3 && h_prime < 4){ var RGB = new RGB(0, X, C); } else if(h_prime <= 4 && h_prime < 5){ var RGB = new RGB(X, 0, C); } else if(h_prime <= 5 && h_prime < 6){ var RGB = new RGB(C, 0, x); } RGB.red = Math.round((RGB.red + m) * 255); RGB.green = Math.round((RGB.green + m) * 255); RGB.blue = Math.round((RGB.blue + m) * 255); return RGB; }
Bref, comment faire pour me débarrasser de cette erreur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 HSL.prototype.toRGB = function(){ var L = this.lightness / 100; var S = this.saturation / 100; var C = (1 - Math.abs(2 * L - 1)) * S; var h_prime = this.hue / 60; var X = C * (1 - Math.abs(h_prime % 2 - 1)); var m = L - (C / 2); var red = 0, green = 0, blue = 0; if(h_prime <= 0 && h_prime < 1) red = C; green = X; else if(h_prime <= 1 && h_prime < 2) red = X; green = C; else if(h_prime <= 2 && h_prime < 3) green = C; blue = X; else if(h_prime <= 3 && h_prime < 4) green = X; blue = C; else if(h_prime <= 4 && h_prime < 5) red = X; blue = C; else if(h_prime <= 5 && h_prime < 6) red = C; blue = X; red += m; green += m; blue += m; return new RGB(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255)); }
Partager