Page 1 sur 4

Comment calculer, teinte, saturation, luminosité couleur

Publié : mer. 12/févr./2014 18:10
par Lord Nelson
Bonjour,

Je viens vers vous, car je recherche désespérément des fonctions pour calculer réellement :

La teinte d'une couleur
La saturation d'une couleur
La Luminosité d'une couleur

Il y a tellement de façon de faire j'ai pu remarquer, sur paint par exemple qui n'est certes pas une référence je vous l'accorde volontiers, va de 0 à 240
Sur PureBasic, c'est de 0 à 100, sur d'autre, de 0 à 255, alors excusez-moi du peu si je suis perdus !

Je voudrais calculer sur une échelle allant de 0 à 255 si tenté que cette échelle soit bien la bonne !
Quelle est donc la véritable échelle ?!

Je suis inexpérimenté pour ne pas dire que je suis nul en math donc inutile de me
sortir des opérations et formules incompréhensibles :wink:

J'ai bien tenté de regarder sur le wiki pour voir s'il avait la solution à mon problème
mais rien que de voir toutes ces formules ma rendus la nausée :?

Puis-je vous demander humblement votre aide svp.

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : mer. 12/févr./2014 19:05
par poshu
Bon, j'ai pas testé (parce que j'ai pas de référence), mais ça doit ressembler à quelque chose comme ça d'après wikipedia:

Code : Tout sélectionner

Procedure Hue(RGB)
	Protected result, R, G, B
	If RGB < = $FFFFFF Or RGB > = 0
		R = Red(RGB)
		G = Green(RGB)
		B = Blue(RGB)
		result = ATan2(Sqr(3)*(G-B),2*R-G-B)
	EndIf
	
	ProcedureReturn result
EndProcedure

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : mer. 12/févr./2014 19:24
par poshu
J'avais pas vu que tu voulais aussi l'intensité et la saturation, du coup, j'ai pompé le code d'ici, mais j'en ai fait des fonctions séparées (donc y'a un peu de redondance)

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, nSum = nImin+nImax, nDifference, Intensity.f, Saturation.f, Hue.f
	If RGB < = $FFFFFF Or RGB > = 0
		R = Red(RGB)
		G = Green(RGB)
		B = Blue(RGB)
		
		nImax = Max(r,b)
		nImax = Max(nImax,g)
		nImin = Min(r,b)
		nImin = Min(nImin,g)
		nSum = nImin+nImax
		nDifference =nImax-nImin
		
		Intensity = nSum/2
		
		If(Intensity<128)
			Saturation=255*(nDifference/nSum)
		Else
			Saturation=255*(nDifference/(510-nSum))
		EndIf
		
		If Saturation<>0
			If(nImax = r)    
				Hue=60*(g-b)/nDifference
			ElseIf nImax = g
				Hue=60*(b-r)/nDifference+120
			ElseIf nImax = b
				Hue=60*(r-g)/nDifference+240
			EndIf
			If Hue<0
				Hue= 60*(b-r)/nDifference+120
			EndIf
		EndIf
	EndIf
	
	ProcedureReturn Hue
EndProcedure

Procedure.f Intensity(RGB)
	Protected R, G, B, nImax,  nImin, nSum = nImin+nImax, Intensity.f
	
	If RGB < = $FFFFFF Or RGB >  0
		R = Red(RGB)
		G = Green(RGB)
		B = Blue(RGB)
		
		nImax = Max(r,b)
		nImax = Max(nImax,g)
		nImin = Min(r,b)
		nImin = Min(nImin,g)
		nSum = nImin+nImax
		
		Intensity = nSum/2
		
	EndIf
	
	ProcedureReturn Intensity
EndProcedure

Procedure.f Saturation(RGB)
	Protected R, G, B, nImax, nImin, nSum = nImin+nImax, nDifference, Intensity.f, Saturation.f
	If RGB < = $FFFFFF Or RGB >  0
		R = Red(RGB)
		G = Green(RGB)
		B = Blue(RGB)
		
		nImax = Max(r,b)
		nImax = Max(nImax,g)
		nImin = Min(r,b)
		nImin = Min(nImin,g)
		nSum = nImin+nImax
		nDifference =nImax-nImin
		
		Intensity = nSum/2
		
		If(Intensity<128)
			Saturation=255*(nDifference/nSum)
		Else
			Saturation=255*(nDifference/(510-nSum))
		EndIf
	EndIf
	
	ProcedureReturn Saturation
EndProcedure
Encore une fois: j'ai pas de référence pour tester é_è

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : mer. 12/févr./2014 20:00
par Lord Nelson
Bonjour poshu,

Je te remercie beaucoup de ton aide :)
Je vais de se pas vérifier si cella fonctionne :D

Edit: Je crois que cella ne fonctionne pas très bien :?
Exemple:

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 Teinte(RGB)
  Protected R, G, B, nImax, nImin, nSum = nImin+nImax, nDifference, Intensity.f, Saturation.f, Hue.f
  If RGB < = $FFFFFF Or RGB >  0
    R = Red(RGB)
    G = Green(RGB)
    B = Blue(RGB)
    
    nImax = Max(r,b)
    nImax = Max(nImax,g)
    nImin = Min(r,b)
    nImin = Min(nImin,g)
    nSum = nImin+nImax
    nDifference =nImax-nImin
    
    Intensity = nSum/2
    
    If(Intensity<128)
      Saturation=255*(nDifference/nSum)
    Else
      Saturation=255*(nDifference/(510-nSum))
      If Saturation<>0
        If(nImax = r)   
          Hue=60*(g-b)/nDifference
        ElseIf nImax = g
          Hue=60*(b-r)/nDifference+120
        ElseIf nImax = b
          Hue=60*(r-g)/nDifference+240
        EndIf
        
        If Hue<0
          Hue= 60*(b-r)/nDifference+120
        EndIf
      EndIf
    EndIf
  EndIf
  
  ProcedureReturn Hue
EndProcedure

Procedure.f Saturation(RGB)
  Protected R, G, B, nImax, nImin, nSum = nImin+nImax, nDifference, Intensity.f, Saturation.f
  If RGB < = $FFFFFF Or RGB >  0
    R = Red(RGB)
    G = Green(RGB)
    B = Blue(RGB)
    
    nImax = Max(r,b)
    nImax = Max(nImax,g)
    nImin = Min(r,b)
    nImin = Min(nImin,g)
    nSum = nImin+nImax
    nDifference =nImax-nImin
    
    Intensity = nSum/2
    
    If(Intensity<128)
      Saturation=255*(nDifference/nSum)
    Else
      Saturation=255*(nDifference/(510-nSum))
    EndIf
  EndIf
  
  ProcedureReturn Saturation
EndProcedure

Procedure.f Luminosite(RGB)
  Protected R, G, B, nImax,  nImin, nSum = nImin+nImax, Intensity.f
  
  If RGB < = $FFFFFF Or RGB >  0
    R = Red(RGB)
    G = Green(RGB)
    B = Blue(RGB)
    
    nImax = Max(r,b)
    nImax = Max(nImax,g)
    nImin = Min(r,b)
    nImin = Min(nImin,g)
    nSum = nImin+nImax
    
    Intensity = nSum/2
    
  EndIf
  
  ProcedureReturn Intensity
EndProcedure

Debug Teinte(451259)
Debug Saturation(451259)
Debug Luminosite(451259)
Debug "---------"
Debug Teinte(451258)
Debug Saturation(451258)
Debug Luminosite(451258)
Debug "---------"
Debug Teinte(451257)
Debug Saturation(451257)
Debug Luminosite(451257)
Normalement les résultats devrais être différent non ?
Ils sont tous pareils là :?

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : mer. 12/févr./2014 20:31
par poshu
J'en ai pas la moindre idée... Tu peux me donner des références?

Genre pour la hue/saturation/intensity pour quelques couleurs, que je regarde un peu ce que je suis sensé chercher (parce que j'ai google hue et c'est ce qu'on m'a sorti; mais comme je sais pas ce que c'est censé être...)?

Note : y'avait bien une faute dans mon calcul de hue (petit endif mal placé ^^; ), c'est corrigé au dessus.

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : mer. 12/févr./2014 21:24
par poshu
Bon, j'ai fait des tests en utilisant photoshop (mais je sais pas si c'est ces résultats que tu veux ou d'autres...)

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
Avec ça, j'obtiens les mêmes valeurs que photoshop CS6, aka Hue en ° compris entre 0 et 360, Saturation et Brightness en % comprises entre 0 et 100%, le tout arrondi à la valeur la plus proche

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 8:35
par TazNormand
Salut
A une époque lointaine j'avais codé des fonctions de conversion RGB vers HSL, voir ce post

Et le code correspondant, mais pas remis au gout du jour (pas en PB 5.21)

Code : Tout sélectionner

; Procédure pour conversion RGB<->HSL
;
; ©.2011 TazNormand

; En TSL (HSL en anglais), la teinte est un angle de 0 à 360°
; La saturation une valeur de 0 à 100%, de même pour la luminosité 0 à 100%

; Variables
Global.f Hue,Sat,Light
Global.l Rouge,Vert,Bleu,Alph

; Déclarations
Declare RGB2HSL(ColR.i,ColG.i,ColB.i)
Declare HSL2RGB(VHue.f,VSat.f,VLit.f)
Declare.f Hue2RGB(Val1.f,Val2.f,Val_H.f)
Declare.f Mini2(val_1.f,val_2.f)
Declare.f Mini3(val_1.f,val_2.f,val_3.f)
Declare.f Maxi2(val_1.f,val_2.f)
Declare.f Maxi3(val_1.f,val_2.f,val_3.f)

; Procédures
Procedure RGB2HSL(ColR.i,ColG.i,ColB.i)
	var_R.f=(ColR/255)
	var_G.f=(ColG/255)
	var_B.f=(ColB/255)
	
	var_Min.f=Mini3(var_R,var_G,var_B)
	var_Max.f=Maxi3(var_R,var_G,var_B)
	del_Max.f=var_Max - var_Min
	
	Light=((var_Max + var_Min) / 2)*100
	
	If del_Max=0
		Hue=0
		Sat=0
	Else
		If Light<=0.5
			Sat=(del_Max / (var_Max + var_Min))*100
		Else
			Sat=(del_Max / (2 - (var_Max + var_Min)))*100
		EndIf
		
		del_R.f=(((var_Max - var_R) / 6) + (del_Max / 2)) / del_Max    
		del_G.f=(((var_Max - var_G) / 6) + (del_Max / 2)) / del_Max    
		del_B.f=(((var_Max - var_B) / 6) + (del_Max / 2)) / del_Max    
			
		If var_R=var_Max            
			Hue=del_B - del_G      
			Hue=((60 * ((var_g - var_b) / del_max)) + 360); % 360      
			;Else      
		ElseIf var_G=var_Max    
			Hue=(1 / 3) + del_R - del_B      
			Hue=(60 * ((var_b - var_r) / del_Max)+120)      
		ElseIf var_B=var_Max      
			Hue=(2 / 3) + del_G - del_R
			Hue=360*Hue
		EndIf        
		;EndIf  
			
		If Hue<0      
			Hue+360      
		EndIf    
		
		If Hue>360      
			Hue-360      
		EndIf  
	EndIf   
EndProcedure

Procedure HSL2RGB(VHue.f,VSat.f,VLit.f)
	vHue/360
	VSat/100
	VLit/100
	If VSat=0
		Rouge=VLit * 255
		Vert= VLit * 255
		Bleu= VLit * 255
	Else
		If VLit<0.5
			tmp_2.f=VLit * (1 + VSat)
		Else
			tmp_2.f=(VLit + VSat) - (VSat * VLit)
		EndIf
		
		tmp_1.f=(2 * VLit) - tmp_2
		
		Rouge=Int(255 * Hue2RGB(tmp_1,tmp_2,VHue + (1 / 3)))
		Vert =Int(255 * Hue2RGB(tmp_1,tmp_2,VHue))
		Bleu =Int(255 * Hue2RGB(tmp_1,tmp_2,VHue - (1 / 3)))
	EndIf  
EndProcedure

Procedure.f Hue2RGB(Val1.f,Val2.f,Val_H.f)
	If Val_H<0
		Val_H+1
	EndIf
	If Val_H>1
		Val_H-1
	EndIf
	If (6 * Val_H)<1
		tmp.f=(Val1 + (Val2 - Val1) * 6 * Val_H)
		ProcedureReturn tmp
	EndIf
	If (2 * Val_H)<1
		tmp.f=Val2
		ProcedureReturn tmp  
	EndIf
	If (3 * Val_H)<2
		tmp.f=(Val1 + (Val2 - Val1) * ((2 / 3) - Val_H) * 6)
		ProcedureReturn tmp  
	EndIf
	
	ProcedureReturn Val1  
EndProcedure

Procedure.f Mini3(val_1.f,val_2.f,val_3.f)
	tmp_1.f=Mini2(val_1,val_2)
	min_3.f=Mini2(tmp_1,val_3)
	
	ProcedureReturn min_3
EndProcedure

Procedure.f Maxi3(val_1.f,val_2.f,val_3.f)
	tmp_1.f=Maxi2(val_1,val_2)
	max_3.f=Maxi2(tmp_1,val_3)
	
	ProcedureReturn max_3
EndProcedure

; Minimum entre 2 valeurs
Procedure.f Mini2(val_1.f,val_2.f)
	If val_1<=val_2
		minimum2.f=val_1
	Else
		minimum2.f=val_2
	EndIf
	ProcedureReturn minimum2
EndProcedure

; Maximum entre 2 valeurs
Procedure.f Maxi2(val_1.f,val_2.f)
	If val_1<=val_2
		maximum2.f=val_2
	Else
		maximum2.f=val_1
	EndIf
	ProcedureReturn maximum2
EndProcedure

#ScrW = 640
#ScrH = 480
#ScrD = 32

If InitSprite() = 0 Or InitKeyboard() = 0 
	MessageRequester( "Erreur" , "Initialisations impossibles", 0)
	End
ElseIf OpenScreen( #ScrW , #ScrH , #ScrD , "HSL Plasma" ) = 0
	MessageRequester( "Erreur" , "Ouverture écran impossible" , 0 )
	End
EndIf
H.f=180
S.f=50
L.f=50
Repeat
	ExamineKeyboard()
	StartDrawing(ScreenOutput())    
			DrawText(0,00,"E pour Hue-,   R pour Hue+",RGB(255,255,255))
			DrawText(0,20,"D pour Sat-,   F pour Sat+",RGB(255,255,255))
			DrawText(0,40,"C pour Light-, V pour Light+",RGB(255,255,255))
			DrawText(0,60,"Escape pour sortir",RGB(255,0,0))
			
			DrawText(300,00,"Hue : "+Str(H)+"°    ",RGB(255,255,255))
			DrawText(300,20,"Sat : "+Str(S)+"%    ",RGB(255,255,255))
			DrawText(300,40,"Lit : "+Str(L)+"%    ",RGB(255,255,255))
			
			DrawText(400,00,"Rouge : "+Str(Rouge)+"    ",RGB(255,255,255))
			DrawText(400,20,"Vert  : "+Str(Vert)+"    ",RGB(255,255,255))
			DrawText(400,40,"Bleu  : "+Str(Bleu)+"    ",RGB(255,255,255))
			
			If KeyboardPushed(#PB_Key_E)
				H-1
				If H<0:H=359:EndIf
			EndIf
			If KeyboardPushed(#PB_Key_R)
				H+1
				If H>360:H=0:EndIf
			EndIf
			If KeyboardPushed(#PB_Key_D)
				S-1
				If S<0:S=0:EndIf
			EndIf
			If KeyboardPushed(#PB_Key_F)
				S+1
				If S>100:S=100:EndIf
			EndIf
			If KeyboardPushed(#PB_Key_C)
				L-1
				If L<0:L=0:EndIf
			EndIf
			If KeyboardPushed(#PB_Key_V)
				L+1
				If L>100:L=100:EndIf
			EndIf
			
			hsltransform=HSL2RGB(H,S,L)      
			Box(100,100,200,200,RGB(Rouge,Vert,Bleu))  
	StopDrawing()
	FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 10:00
par Lord Nelson
Je vous remercie pour votre précieuse aide :)

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 ?

Exemple que tu peux tester avec ton programme:
451259 (Couleur brut), donne:

Teinte = 71
Saturation = 97
Luminosité = 89

451260 (Couleur brut), donne:

Teinte = 71
Saturation = 97
Luminosité = 89

451261 (Couleur brut), donne:

Teinte = 71
Saturation = 97
Luminosité = 89
Il y a je pense problème non ?

Les 3 couleurs qui sont très proche les unes des autres devrais pourtant avoir certains résultats différents, au moins une non ?
Là tous les résultats sont identiques !

En conclusion, même deux couleurs voisine ne peuvent pas avoir les mêmes résultats
de teinte et saturation si la luminosité est identique aux deux.

Donc je crains fort que t'es procédures sois faussent si je ne me trompe :oops:
Maintenant je peut complètement me tromper hein car j'y connais pas grand choses en couleurs :oops:

TazNormand merci pour ton programme mais je ne parviens pas à le faire fonctionner chez moi :(
Si seulement il y avais une vérritable façon de faire...

Fred ne pourrait-il pas rajouter des fonctions pour calculer ceci ?!
Encore merci de votre aide :)

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 10:30
par falsam
Bonjour Lord Nelson.

N'ayant pas de grandes connaissances dans ce domaine, je ne te répondrais pas. :) Par contre je te propose le lien ci-dessous et peut être que tu pourrais nous coder ces deux formules miracles (Teinte, Saturation et luminosité) à partir d'une couleur RGB ou RGBA.

http://www.easyrgb.com/index.php?X=MATH

En 2011 j'avais déja essayé de faire quelque chose sur la saturation.
http://www.purebasic.fr/french/viewtopi ... 70#p134670

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 10:34
par Micoute
poshu a écrit :Bon, j'ai fait des tests en utilisant photoshop (mais je sais pas si c'est ces résultats que tu veux ou d'autres...)

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
Bonjour Poshu, moi j'aurais plutôt fait comme ça :

Code : Tout sélectionner

ProcedureDLL Minimum(R, V, B) 
  Protected resultat = r 
  If v < resultat
    resultat = v
  EndIf 
  If b < resultat
    resultat = b
  EndIf 
  ProcedureReturn resultat 
EndProcedure 

ProcedureDLL Maximum(R, V, B) 
  Protected resultat = r 
  If v > resultat
    resultat = v
  EndIf 
  If b > resultat
    resultat = b
  EndIf 
  ProcedureReturn resultat 
EndProcedure

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 10:37
par GallyHC
Bonjour,

falsam> ton lien est vachement intéressent dans tout les cas, je le note bien ;)

Cordialement,
GallyHC

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 10:53
par Micoute
Bonjour falsam, je me joins à GallyHC que je salue également pour te faire le même compliment.

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 11:09
par Backup
...

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 12:23
par Fig
D'une façon ou d'une autre, la formule donnée par wikipédia ne correspond pas à celle utilisée par photoshop.

Image
Image
Image

Code : Tout sélectionner

Procedure Max(R, G, B)
    resultat = R
    If G > R
        resultat = G
    EndIf
    If B > resultat
        Resultat=B
    EndIf
    ProcedureReturn resultat
EndProcedure

Procedure Min(R, G, B)
    resultat = R
    If G < R
        resultat = G
    EndIf
    If B < resultat
        Resultat=B
    EndIf
    ProcedureReturn resultat
EndProcedure 

Procedure Hue(RGB)
    If RGB < = $FFFFFF Or RGB > = 0
        r = Red(RGB)
        g= Green(RGB)
        b= Blue(RGB)
        nImax = Max(r,g,b)
        nImin = Min(r,g,b)
        nDifference =nImax-nImin
        If nImax=nImin:ProcedureReturn 0:EndIf
        If nimax=r
        resultat.f=(60*(g-b)/nDifference+360)
            ProcedureReturn resultat
        EndIf
        If nimax=g
        resultat.f=(60*(b-r)/nDifference+120)
            ProcedureReturn resultat
        EndIf     
        If nimax=b
        resultat.f=(60*(r-g)/nDifference+240)
            ProcedureReturn resultat
        EndIf
    EndIf
EndProcedure

Procedure Intensity(RGB)
    If RGB < = $FFFFFF Or RGB > = 0
        R = Red(RGB)
        G = Green(RGB)
        B = Blue(RGB)
        nImax = Max(r,g,b)*100
        ProcedureReturn nImax/255
    EndIf
EndProcedure

Procedure 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(r,g,b)
        nImin = Min(r,g,b)
        If nImax=0:ProcedureReturn 0:EndIf
        resultat.f=(1 - nImin / nImax)
        ProcedureReturn resultat*100
    EndIf
EndProcedure
Debug "Pour :"+Str(451259)
Debug "Hue: "+Str(Hue(451259))
Debug "Sat: "+Str(saturation(451259))
Debug "Int: "+Str(Intensity(451259))
Debug " "
Debug "Pour :"+Str(451260)
Debug "Hue: "+Str(Hue(451260))
Debug "Sat: "+Str(saturation(451260))
Debug "Int: "+Str(Intensity(451260))
Il y avait un souci d'arrondi...
Pour :451259
Hue: 71
Sat: 97
Int: 88

Pour :451260
Hue: 70
Sat: 97
Int: 88

Re: Comment calculer, teinte, saturation, luminosité couleur

Publié : jeu. 13/févr./2014 14:02
par Backup
...