pareil que Photoshop
Comment calculer, teinte, saturation, luminosité couleur
Re: Comment calculer, teinte, saturation, luminosité couleur
je viens de corriger mon code , ça tourne
pareil que Photoshop
pareil que Photoshop
Re: Comment calculer, teinte, saturation, luminosité couleur
Bien joué le traitement du float en string, pour l'arrondi 
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: Comment calculer, teinte, saturation, luminosité couleur
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:
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 " ******************* "
NextMicrosoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
-
Lord Nelson
- Messages : 355
- Inscription : dim. 01/déc./2013 15:29
Re: Comment calculer, teinte, saturation, luminosité couleur
Bonjour tous le monde
Merci de vos réponse à tous, c'est trè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 l'impression que va falloir que je m'y fasse
Car ayant tester tout vos code, j'ai toujours le même problème
J'ai tester en partant de 451259 jusqu'à 451265 et mauvaise surprises, certaine couleurs on quand même la même teinte et saturation et même luminosité
Par contre n'ont pas les même valeur de R, V et B se qui est parfaitement normale.
Bon, ça dois être à cause de l’arrondis, on à pas le choix j'ai l'impression, le problème viens donc de la source, pourquoi cet arrondis ?
Il est vrais que j'ai demandé entre 0 à 255 mais je crois bien que j'ai fais fausse route non ?
Vos codes sont très certainement juste, c'est l'arrondis le problème et non vos codes.
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 ?
Je m’excuses car je suis embarrasser de la tournure que les choses prennent
Je n'ose pas vous en demander d'avantage, vous avez déjà beaucoup fais pour moi
En faite, je cherchais le moyen de crée une belle palette de couleurs comme le propose par exemple paint ou PureBasic ou autre programme.
Donc j'étais partie de ceci avec se que j'avais:
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)
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 !
Mais...
Ceci ne fonctionnais pas, j'avais des ligne noir et un tas de pixel noir au début de la palette !
Mais normalement je m'attendais à avoir 256 * 256 couleurs complétement différente les unes des autres dans un jolie dégrader de couleur !
Car je croyais qu'il avais 256 teinte (De 0 à 255), 256 saturation et 256 luminosité de couleurs différente mais en vain !
J'ai bien des choses à apprendre !
Même dans les palette de couleurs en dégrader que propose certain logiciel, et bien il y à des couleurs en double voir plus !
Je ne comprenais pas pourquoi !
J'ai peut être compris dorénavant
PS: Désoler pour la placard
Merci de vos réponse à tous, c'est trè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 l'impression que va falloir que je m'y fasse
Car ayant tester tout vos code, j'ai toujours le même problème
J'ai tester en partant de 451259 jusqu'à 451265 et mauvaise surprises, certaine couleurs on quand même la même teinte et saturation et même luminosité
Par contre n'ont pas les même valeur de R, V et B se qui est parfaitement normale.
Bon, ça dois être à cause de l’arrondis, on à pas le choix j'ai l'impression, le problème viens donc de la source, pourquoi cet arrondis ?
Il est vrais que j'ai demandé entre 0 à 255 mais je crois bien que j'ai fais fausse route non ?
Vos codes sont très certainement juste, c'est l'arrondis le problème et non vos codes.
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 ?
Je m’excuses car je suis embarrasser de la tournure que les choses prennent
Je n'ose pas vous en demander d'avantage, vous avez déjà beaucoup fais pour moi
En faite, je cherchais le moyen de crée une belle palette de couleurs comme le propose par exemple paint ou PureBasic ou autre programme.
Donc j'étais partie de ceci avec se que j'avais:
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)
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 !
Mais...
Ceci ne fonctionnais pas, j'avais des ligne noir et un tas de pixel noir au début de la palette !
Mais normalement je m'attendais à avoir 256 * 256 couleurs complétement différente les unes des autres dans un jolie dégrader de couleur !
Car je croyais qu'il avais 256 teinte (De 0 à 255), 256 saturation et 256 luminosité de couleurs différente mais en vain !
J'ai bien des choses à apprendre !
Même dans les palette de couleurs en dégrader que propose certain logiciel, et bien il y à des couleurs en double voir plus !
Je ne comprenais pas pourquoi !
J'ai peut être compris dorénavant
PS: Désoler pour la placard
Re: Comment calculer, teinte, saturation, luminosité couleur
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
RGB = 256 * 256 * 256 = 16 777 216 possibilités
HSL (arrondie comme dans CS6) = 360 * 100 * 100 = 3 600 000 possibilités, forcément, va y avoir des doublons...
CQFD
Re: Comment calculer, teinte, saturation, luminosité couleur
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
normale
si tu regarde attentivement la sortie de ma procedure
ex :
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] *******************
la température non arrondit montre bien une différence
T.f=68.1818161011
T.f=67.9090881348
c'est meme la raison pour laquel j'ai laissé la variable T.f affichée ...
donc le code fonctionne !
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.
si elle est représenté sur un Cercle, ça peut etre de 0 a 360°
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)
oui, a condition d'avoir 255 cases Lumiere pouvant accueillir toute les possibilité de couleur T=145,S=173 (et les 255 L )
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 !
la couleur T=125 S=150 devra etre presente sous toute ses formes de lumiere exemple des 5 premieres
T=125 S=150 L=0
T=125 S=150 L=1
T=125 S=150 L=2
T=125 S=150 L=3
T=125 S=150 L=4
ici le L=Lumiere (TLS )
T= teinte
S=Saturation
[/quote]
Dernière modification par Backup le jeu. 13/févr./2014 18:05, modifié 2 fois.
-
Lord Nelson
- Messages : 355
- Inscription : dim. 01/déc./2013 15:29
Re: Comment calculer, teinte, saturation, luminosité couleur
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
*******************
Re: Comment calculer, teinte, saturation, luminosité couleur
Entièrement d'accord ! Précaution non négligeable !la température non arrondit montre bien une différence
Bravo Dobro et merci encore
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment calculer, teinte, saturation, luminosité couleur
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
*******************
aucun probleme !!
Photoshop fait de meme regarde :
ps: Je viens de corriger mon code , pour qu'il renvoi 0 et non pas "Nan"
et j'avais une inversion entre le S et le L
-
Lord Nelson
- Messages : 355
- Inscription : dim. 01/déc./2013 15:29
Re: Comment calculer, teinte, saturation, luminosité couleur
Ah bha là sa change tout !
Merci Dobro
Merci également à tous pour votre aide !
Merci Dobro
Merci également à tous pour votre aide !
Re: Comment calculer, teinte, saturation, luminosité couleur
...
Dernière modification par Backup le mar. 19/août/2014 9:50, modifié 1 fois.
Re: Comment calculer, teinte, saturation, luminosité couleur
Au risque d'être encore ignoré...
Calcul de HBS depuis RGB et l'inverse, sans bruteforce... Bon, la technique est pas top, mais c'est bricolé en 10 minutes et j'avais pas de meilleure idée; je pense qu'avec un peu de connaissance en trigonométrie on doit pouvoir faire beaucoup plus efficace, mais j'ai laissé tout mon savoir mathématique sur ma copie de bac
Calcul de HBS depuis RGB et l'inverse, sans bruteforce... Bon, la technique est pas top, mais c'est bricolé en 10 minutes et j'avais pas de meilleure idée; je pense qu'avec un peu de connaissance en trigonométrie on doit pouvoir faire beaucoup plus efficace, mais j'ai laissé tout mon savoir mathématique sur ma copie de bac
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
Dernière modification par poshu le ven. 14/févr./2014 9:42, modifié 1 fois.
-
Lord Nelson
- Messages : 355
- Inscription : dim. 01/déc./2013 15:29
Re: Comment calculer, teinte, saturation, luminosité couleur
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.
@poshu Bonjour,
Non bien sur que non je ne t’ignore pas, loin de là d'ailleurs
T'es codes sont aussi très bon et c'est un plaisir de vous avoirs vous tous pour débattre de se sujet très intéressant
Encore merci.
PS: Ton code TSLToRGB marche très bien
Dobro, qu'a tu à dire pour ta défense ?
C'est toujours très agréable de voir un tas de personne nous aider et s’affronter si je puis dire ainsi pour trouver les meilleurs solutions possible.
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.
@poshu Bonjour,
Non bien sur que non je ne t’ignore pas, loin de là d'ailleurs
T'es codes sont aussi très bon et c'est un plaisir de vous avoirs vous tous pour débattre de se sujet très intéressant
Encore merci.
PS: Ton code TSLToRGB marche très bien
Dobro, qu'a tu à dire pour ta défense ?
C'est toujours très agréable de voir un tas de personne nous aider et s’affronter si je puis dire ainsi pour trouver les meilleurs solutions possible.
Dernière modification par Lord Nelson le ven. 14/févr./2014 9:59, modifié 1 fois.
Re: Comment calculer, teinte, saturation, luminosité couleur
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.
- • 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...
Dernière modification par poshu le ven. 14/févr./2014 10:03, modifié 1 fois.
-
Lord Nelson
- Messages : 355
- Inscription : dim. 01/déc./2013 15:29
Re: Comment calculer, teinte, saturation, luminosité couleur
On viens de se croiser mon cher @poshu
Non tu n'est en rien un pot de fleur, c'est surement moi qui est mal lue ou pas bien compris, je suis parfois un peut tête en l'air
Oui ton code est mieux pour le TSL vers RGB mais chuuuuuuut le dit pas à Dobro qui a passé des heurs à chercher sur internet la solution, il pourrais se fâcher...
Non tu n'est en rien un pot de fleur, c'est surement moi qui est mal lue ou pas bien compris, je suis parfois un peut tête en l'air
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...
Oui ton code est mieux pour le TSL vers RGB mais chuuuuuuut le dit pas à Dobro qui a passé des heurs à chercher sur internet la solution, il pourrais se fâcher...