donc en bref le rgb c l'identification système d'une couleur et le TSL (HSL en anglais) et une représentation plus humaine de la couleur.
désolé pour la couleur j'ai un bug avec mon colorer ;(
a la fin, vous trouverez un petit code pour changer la teinte d'une image
Code : Tout sélectionner
ProcedureDLL Round2(Number.f)
x.f = Number-Round(Number,0)
If x>=0.5
ProcedureReturn Round(Number, 1)
Else
ProcedureReturn Round(Number, 0)
EndIf
EndProcedure
ProcedureDLL Hue(Color) ; teinte
R = Red(Color) : G = Green(Color) : B = Blue(Color)
If R < G And R < B
Min = R
If G > B
Max = G
Else
Max = B
EndIf
ElseIf G < B
Min = G
If R > B
Max = R
Else
Max = B
EndIf
Else
Min = B
If R > G
Max = R
Else
Max = G
EndIf
EndIf
D = Max-Min
If R = Max
T.f = (G-B)/D
ElseIf G = Max
T.f = (B-R)/D + 2
Else
T.f = (R-G)/D + 4
EndIf
If T< 0
ProcedureReturn 240+(Round2(1/6*(T*240)) % 240)
EndIf
ProcedureReturn Round2(1/6*(T*240)) % 240
EndProcedure
ProcedureDLL Luminance(Color) ; luminosité
R = Red(Color) : G = Green(Color) : B = Blue(Color)
If R < G And R < B
Min = R
If G > B
Max = G
Else
Max = B
EndIf
ElseIf G < B
Min = G
If R > B
Max = R
Else
Max = B
EndIf
Else
Min = B
If R > G
Max = R
Else
Max = G
EndIf
EndIf
ProcedureReturn Round2(240*(Max + Min)/510)
EndProcedure
ProcedureDLL Saturation(Color)
R = Red(Color) : G = Green(Color) : B = Blue(Color)
If R < G And R < B
Min = R
If G > B
Max = G
Else
Max = B
EndIf
ElseIf G < B
Min = G
If R > B
Max = R
Else
Max = B
EndIf
Else
Min = B
If R > G
Max = R
Else
Max = G
EndIf
EndIf
If Max+Min =< 255
ProcedureReturn Round2((Max-Min)/(Max+Min)*240)
Else
ProcedureReturn Round2((Max-Min)/(510-(Max+Min))*240)
EndIf
EndProcedure
ProcedureDLL HSL(Hue, Saturation, Luminance) ; TSL (Teinte, Saturation, Luminosité) ; renvoi la couleur sous format RGB
T.f = 6*Hue/240
If Luminance =< 120
Max = Round2(255*Luminance*(1+Saturation/240)/240)
Min = Round2(255*Luminance*(1-Saturation/240)/240)
Else
Max = Round2(255*(Luminance*(1-Saturation/240)/240+Saturation/240))
Min = Round2(255*(Luminance*(1+Saturation/240)/240-Saturation/240))
EndIf
D = Max-Min
i = Round(T, 0)
If i = 0
R = Max : G = Min+T*D : B = Min
ElseIf i = 1
R = Min + (2-T)*D : G = Max : B = Min
ElseIf i = 2
R = Min : G = Max : B = Min+(T-2)*D
ElseIf i = 3
R = Min : G = Min+(4-T)*D : B = Max
ElseIf i = 4
R = Min + (T-4)*D : G = Min : B = Max
Else
R = Max : G = Min : B = Min+(6-T)*D
EndIf
ProcedureReturn RGB(R,G,B)
EndProcedure
couleur = $FFDD00
Debug couleur
Debug "---"
Debug Hue(couleur)
Debug Saturation(couleur)
Debug Luminance(couleur)
Debug "---"
Debug HSL(125, 240, 120)