Page 1 sur 1

TSL - RGB, RGB - TSL, 0 - 255

Publié : sam. 28/mai/2016 11:50
par Shadow
Salut, je souhaiterais depuis ses 3 procédure-ci et aussi RGB
convertir du TSL vers RGB et inversement.

Les résultats varieront de 0 à 255 si j'me plante pas :)
Je ne sais plus à qui appartienne ses procédure-ci dessous:

Code : Tout sélectionner

Procedure Teinte(Couleur.i) ; Donne la teinte d'une couleur (Hue)
   Protected fTeinte.f, Rouge.i, Vert.i, Bleu.i, Minimum.i, Maximum.i, Difference.i
   Rouge = Red(Couleur) : Vert = Green(Couleur) : Bleu = Blue(Couleur)
   If Rouge =  Vert And Rouge = Bleu And Vert = Bleu
      ProcedureReturn 160
   EndIf
   If Rouge < Vert And Rouge < Bleu
      Minimum = Rouge
      If Vert > Bleu
         Maximum = Vert
      Else
         Maximum = Bleu
      EndIf
   ElseIf Vert < Bleu
      Minimum = Vert
      If Rouge > Bleu
         Maximum = Rouge
      Else
         Maximum = Bleu
      EndIf
   Else
      Minimum = Bleu
      If Rouge > Vert
         Maximum = Rouge
      Else
         Maximum = Vert
      EndIf
   EndIf
   Difference = Maximum-Minimum
   If Rouge = Maximum
      fTeinte = (Vert-Bleu)/Difference
   ElseIf Vert = Maximum
      fTeinte = (Bleu-Rouge)/Difference + 2
   Else
      fTeinte = (Rouge-Vert)/Difference + 4
   EndIf
   If fTeinte< 0
      ProcedureReturn 255+Round(Mod((1/6*(fTeinte*255)), 255), #PB_Round_Nearest)
   Else
      ProcedureReturn Round(Mod((1/6*(fTeinte*255)), 255), #PB_Round_Nearest)
   EndIf
   
EndProcedure

Procedure Saturation(Couleur.i) ; retourne la saturation d'une couleur
   Protected Rouge.i, Vert.i, Bleu.i, Minimum.i, Maximum.i
   Rouge = Red(Couleur) : Vert = Green(Couleur) : Bleu = Blue(Couleur)
   If (Rouge = 0 And Vert = 0 And Bleu = 0) Or (Rouge = 255 And Vert = 255 And Bleu = 255)
      ProcedureReturn 0
   EndIf
   If Rouge < Vert And Rouge < Bleu
      Minimum = Rouge
      If Vert > Bleu
         Maximum = Vert
      Else
         Maximum = Bleu
      EndIf
   ElseIf Vert < Bleu
      Minimum = Vert
      If Rouge > Bleu
         Maximum = Rouge
      Else
         Maximum = Bleu
      EndIf
   Else
      Minimum = Bleu
      If Rouge > Vert
         Maximum = Rouge
      Else
         Maximum = Vert
      EndIf
   EndIf
   If Maximum+Minimum =< 255
      ProcedureReturn Round(((Maximum-Minimum)/(Maximum+Minimum)*255),#PB_Round_Nearest)
   Else
      ProcedureReturn Round(((Maximum-Minimum)/(510-(Maximum+Minimum))*255), #PB_Round_Nearest)
   EndIf
 EndProcedure
 
Procedure Luminosite(Couleur.i) ; Donne la luminosité d'une couleur
   Protected Rouge.i, Vert.i, Bleu.i, Minimum.i, Maximum.i
   Rouge = Red(Couleur) : Vert = Green(Couleur) : Bleu = Blue(Couleur)
   If Rouge < Vert And Rouge < Bleu
      Minimum = Rouge
      If Vert > Bleu
         Maximum = Vert
      Else
         Maximum = Bleu
      EndIf
   ElseIf Vert < Bleu
      Minimum = Vert
      If Rouge > Bleu
         Maximum = Rouge
      Else
         Maximum = Bleu
      EndIf
   Else
      Minimum = Bleu
      If Rouge > Vert
         Maximum = Rouge
      Else
         Maximum = Vert
      EndIf
   EndIf
   ProcedureReturn Round((255*(Maximum + Minimum)/510), #PB_Round_Nearest)
EndProcedure
Pourriez-vous m'aider svp :)

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : sam. 28/mai/2016 14:24
par TazNormand

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : sam. 28/mai/2016 16:14
par Shadow
Merci Taz.
Mais je trouve pas, entre 0 et 255.

Arès quel est la vraie norme ?
0 - 255 pour tout
100% pour tout sauf teinte 0 - 360.

C'est pour mon programme Boîte couleur.

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : sam. 28/mai/2016 19:27
par TazNormand
Dans mon ancien topic, tu as 2 fonctions de conversion RGB2HSL() et HLS2RGB().

Dans le cas du HSL2RGB(Teinte,Saturation,Luminosité), si tu lui passes les valeurs TSL (HSL en anglais), elle te redonne les 3 valeurs du Rouge, du Vert et du Bleu, donc forcément, tu ne va pas avoir une valeur entre 0 et 255 unique, mais 3 valeurs entre 0 et 255 pour les 3 couleurs RVB.

Tu cherches à travailler sur une palette de 256 couleurs, alors que la fonction renvoie à une palette de 256*256*256 (un peu plus de 16 Millions de couleurs).

Tu cherches quoi exactement, à créer une palette de 256 couleurs, ou à "bloquer" 256 couleurs sur une palette de 16 millions ?

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : sam. 28/mai/2016 19:55
par Shadow
Non simplement renvoyer TSL ou chaque canaux va de 0 à 255 :)
Après je sais pas je fais se que je peut, je ne sais pas c'est quoi la norme.

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : dim. 29/mai/2016 9:27
par GallyHC
Bonjour,

Si je peux me permettre une chose, si tu ne sais pas, tu peux faire comme beaucoup et rechercher sur le net des informations sur le sujet que tu recherches (en a peine 10 secondes, j'ai trouvé, https://fr.wikipedia.org/wiki/Teinte_sa ... mi%C3%A8re).

Cordialement,
GallyHC

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : dim. 29/mai/2016 17:59
par Bernie
je comprend pas que ce tu veux faire exactement
tu une commande en pb qui s'appelle ColorRequester qui t'affiche la boite de dialogue de la palette couleur

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : lun. 30/mai/2016 7:12
par Micoute
Bernie a écrit :je ne comprends pas que ce tu veux faire exactement
tu as une commande en pb qui s'appelle ColorRequester qui t'affiche la boîte de dialogue de la palette couleur
Tu n'as jamais eus l'envie de créer tes propres gadgets ?

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : lun. 30/mai/2016 9:22
par Bernie
Micoute a écrit :
Bernie a écrit :je ne comprends pas que ce tu veux faire exactement
tu as une commande en pb qui s'appelle ColorRequester qui t'affiche la boîte de dialogue de la palette couleur
Tu n'as jamais eus l'envie de créer tes propres gadgets ?
non ça m'intéresse pas du tout il y a PIF pour faire ça :mrgreen:

Re: TSL - RGB, RGB - TSL, 0 - 255

Publié : mar. 31/mai/2016 12:11
par microdevweb
Pour information mon cher Bernie,

Le colorRequester de Pb est fortement l'imité (exemple: ne prend pas en charge les alphas) je ne comprend d’ailleurs pas que le colorRequester de l'ide ne fasse pas partie des gadgets. Donc il peu-être intéressant de faire sont propre colorRequester .