pareil que Photoshop

Code : Tout sélectionner
For couleur.i =451259 To 451270
TSL.s= Rgb_TSL(couleur.i)
Debug "Couleur="+Str(couleur.i)+ " ==> Rouge="+StringField(TSL.s,4,",")+","+"Vert="+StringField(TSL.s,5,",")+","+"Bleu="+StringField(TSL.s,6,",")
Debug""
Debug "Teinte="+StringField(TSL.s,1,",")
Debug "Lumiere="+StringField(TSL.s,2,",")
Debug "Saturation="+StringField(TSL.s,3,",")
Debug " ******************* "
Next
Lord Nelson a écrit : poshu en faite si tu est d'accord avec moi, deux couleurs ne peuvent jamais avoir la même teinte et saturation pour la même luminosité ok ?
Si la luminosité est différente là ok, tu me suis ?
Mon code est conforme à CS6. Enlève l'arrondi et tu as des valeurs différentes, c'est de toutes façons assez logique:Poshu a écrit :Avec ça, j'obtiens les mêmes valeurs que photoshop CS6, aka Hue en ° compris entre 0 et 360, Saturation et Intensity en % comprises entre 0 et 100%, le tout arrondi à la valeur la plus proche
Micoute a écrit :Bien joué Dobro, mais il subsiste malgré une petite erreur, quoique tu es sur la bonne voie
Tu reprends to code et tu essayes ça:Code : Tout sélectionner
For couleur.i =451259 To 451270 TSL.s= Rgb_TSL(couleur.i) Debug "Couleur="+Str(couleur.i)+ " ==> Rouge="+StringField(TSL.s,4,",")+","+"Vert="+StringField(TSL.s,5,",")+","+"Bleu="+StringField(TSL.s,6,",") Debug"" Debug "Teinte="+StringField(TSL.s,1,",") Debug "Lumiere="+StringField(TSL.s,2,",") Debug "Saturation="+StringField(TSL.s,3,",") Debug " ******************* " Next
la teinte (temperature) ressort 68 car il y a arrondit !![17 :38 :22] T.f=68.1818161011
[17 :38 :22] Couleur=451268 ==> Rouge=196,Vert=226,Bleu=6
[17 :38 :22]
[17 :38 :22] Teinte=68
[17 :38 :22] Lumiere=97
[17 :38 :22] Saturation=89
[17 :38 :22] *******************
[17 :38 :22] T.f=67.9090881348
[17 :38 :22] Couleur=451269 ==> Rouge=197,Vert=226,Bleu=6
[17 :38 :22]
[17 :38 :22] Teinte=68
[17 :38 :22] Lumiere=97
[17 :38 :22] Saturation=89
[17 :38 :22] *******************
non, je dis que 2 couleurs peuvent avoir la meme Saturation et la meme Luminosité !Lord Nelson a écrit :s gentil de votre part![]()
Dobro, tu me met dans l’embarra tu sais, tu dis que deux couleurs peuvent avoir la même teinte et saturation
Avec ou sans la même luminosité ?
J'ai crus comprendre que la véritable échelle pour une teinte est de 0 à 360° ?
Pour la saturation et la luminosité c'est pareil ou ça va de 0 à 100% comme j'ai crue le voir ?
comme on la représente en pourcentage, elle peut aller de 0 a 100% (tout depends de la représentation )La couleur d'une source lumineuse est comparée à celle d'un corps noir théorique chauffé entre 2 000 et 10 000 K, qui aurait dans le domaine de la lumière visible un spectre d'émission similaire à la couleur considérée.
tu part faux , c'est pas une échelle de 0 a 255 , c'est une échelle allant de 255x255x255 =16581375 (16 millions de couleurs possible )
Si la luminosité de la couleurs était 120 (120 oui, pourquoi 120 ?...)
Je place dans un tableau à deux dimension qui à 256 élément (de 0 à 255) dans chaque la couleur suivant la teinte et la saturation de la couleur
Si par exemple la couleur à une teinte de 145 et une saturation de 173, je met alors cet élément dans le tableau en 145, 173
Ainsi je me crée un tableau de couleurs qui vont être trier suivant leur teinte et leur saturation (Je ne sais pas si je suis clair)
il te manque les 255 lumieres !Ensuite je crée une image au dimension du tableau (256 x 256) en parcourant se tableau et en dessinant les pixel de couleur du tableau (Je suis toujours clair ?)
Ainsi à la sortie j'ai une jolie palette de couleurs !
Code : Tout sélectionner
TSL.s= Rgb_TSL(RGB(255, 255, 255))
Debug "Couleur="+Str(couleur.i)+ " ==> Rouge="+StringField(TSL.s,4,",")+","+"Vert="+StringField(TSL.s,5,",")+","+"Bleu="+StringField(TSL.s,6,",")
Debug""
Debug "Teinte="+StringField(TSL.s,1,",")
Debug "Lumiere="+StringField(TSL.s,2,",")
Debug "Saturation="+StringField(TSL.s,3,",")
Debug " ******************* "
T.f=NaN
Couleur=0 ==> Rouge=255,Vert=255,Bleu=255
Teinte=NaN
Lumiere=0
Saturation=100
*******************
Entièrement d'accord ! Précaution non négligeable !la température non arrondit montre bien une différence
Lord Nelson a écrit :Et pour ça t'as une objection Dobro ?
Sa donne:Code : Tout sélectionner
TSL.s= Rgb_TSL(RGB(255, 255, 255)) Debug "Couleur="+Str(couleur.i)+ " ==> Rouge="+StringField(TSL.s,4,",")+","+"Vert="+StringField(TSL.s,5,",")+","+"Bleu="+StringField(TSL.s,6,",") Debug"" Debug "Teinte="+StringField(TSL.s,1,",") Debug "Lumiere="+StringField(TSL.s,2,",") Debug "Saturation="+StringField(TSL.s,3,",") Debug " ******************* "
T.f=NaN
Couleur=0 ==> Rouge=255,Vert=255,Bleu=255
Teinte=NaN
Lumiere=0
Saturation=100
*******************
Code : Tout sélectionner
Procedure Max(A,B)
If A > B
ProcedureReturn A
Else
ProcedureReturn B
EndIf
EndProcedure
Procedure Min(A,B)
If A < B
ProcedureReturn A
Else
ProcedureReturn B
EndIf
EndProcedure
Procedure.f Hue(RGB)
Protected R, G, B, nImax, nImin, Hue.f
If RGB < = $FFFFFF Or RGB > = 0
R = Red(RGB)
G = Green(RGB)
B = Blue(RGB)
nImax = Max(Max(r,b),g)
nImin = Min(Min(r,b),g)
If(nImax = r)
Hue=60*(g-b)/(nImax-nImin)
ElseIf nImax = g
Hue=60*(b-r)/(nImax-nImin)+120
ElseIf nImax = b
Hue=60*(r-g)/(nImax-nImin)+240
EndIf
If Hue<0
Hue = 360 + Hue
EndIf
EndIf
ProcedureReturn Hue
EndProcedure
Procedure.f Brightness(RGB)
Protected R, G, B, nImax, Brightness.f
If RGB < = $FFFFFF Or RGB > = 0
R = Red(RGB)
G = Green(RGB)
B = Blue(RGB)
nImax = Max(Max(r,b),g)
Brightness = nImax/255
EndIf
ProcedureReturn Brightness * 100
EndProcedure
Procedure.f Saturation(RGB)
Protected R, G, B, nImax, nImin, Saturation.f
If RGB < = $FFFFFF Or RGB > = 0
R = Red(RGB)
G = Green(RGB)
B = Blue(RGB)
nImax = Max(Max(r,b),g)
nImin = Min(Min(r,b),g)
Saturation = 1 - nImin / nImax
EndIf
ProcedureReturn Saturation * 100
EndProcedure
Procedure HSBToRGB(Hue.f,Brightness.f,Saturation.f)
Protected R,G,B
Protected TopColor = Round(Brightness*255/100,#PB_Round_Nearest)
Protected MinColor = Round((Saturation/100 -1)*-1*TopColor,#PB_Round_Nearest)
Select Hue
Case 61 To 180
G = TopColor
Hue = Round((Hue -120) * (TopColor - MinColor) / 60,#PB_Round_Nearest)
If Hue > 0
R = MinColor
B = hue + R
Else
B = MinColor
R = (hue - B) * -1
EndIf
Case 181 To 300
B = TopColor
Hue = Round((Hue -240) * (TopColor - MinColor) / 60,#PB_Round_Nearest)
If Hue > 0
G = MinColor
R = hue + G
Else
R = MinColor
G = (hue - R) * -1
EndIf
Default
R = TopColor
If hue > 301
Hue - 360
EndIf
Hue = Round(Hue * (TopColor - MinColor) / 60,#PB_Round_Nearest)
If hue > 0
B = MinColor
G = hue + B
Else
G = MinColor
B = (Hue - G) *-1
EndIf
EndSelect
ProcedureReturn RGB(R,G,B)
EndProcedure
Mais, par curiosité, tu lis ce que j'écris? Juste pour savoir si je suis un pot de fleur ou pas :Lord Nelson a écrit :Bonjour,
Dobro ton code renvoie pas les même valeur de couleurs pourquoi ?
La sortie RGB n'est pas la même que l'entrée, t'as une idée pourquoi ?
De plus le résultat est beaucoup trop long![]()
Imagine une boucle de 256 * 256 * 256, tu imagine toi le temps que ça va mètre![]()
En tout qu'a merci beaucoup pour ce code![]()
Déjà ton code RBG_TSL est très performant alors 1000 merci à toi.
Bha oui évidement que tu as raison et je l'es bien compris qu'il ne fallait pas arrondirMais, par curiosité, tu lis ce que j'écris? Juste pour savoir si je suis un pot de fleur ou pas :
• Avec 3 600 000 possibilités pour du HBL arrondi contre 16 777 216 pour du RGB, forcément tu peux pas retrouver précisément la même couleur. Si tu veux retrouver la même couleur, faut pas arrondir (voir mon code qui n’arrondit pas, deux posts au dessus)
• Sans tester des millions de combinaisons pour retrouver ton RGB, y'a aussi mon code, toujours deux posts au dessus...