Comment fait-on pour décomposer une couleur comme suit:
Savoir la Teinte d'une couleur
Savoir la saturation d'une couleur
Savoir la luminosité d'une couleur
Savoir la chrominances d'une couleur
Qu'est ce qu'une chrominances ?
Merci d'avence

Code : Tout sélectionner
Global Rouge = 50
Global Vert = 100
Global Bleu = 200
Procedure LePlusGrand()
If Rouge => Vert And Rouge => Bleu
LePlusGrand = Rouge
ElseIf Vert => Rouge And Vert => Bleu
LePlusGrand = Vert
ElseIf Bleu => Rouge And Bleu => Vert
LePlusGrand = Bleu
EndIf
ProcedureReturn LePlusGrand
EndProcedure
Procedure LePlusPetit()
If Rouge <= Vert And Rouge <= Bleu
LePlusPetit = Rouge
ElseIf Vert <= Rouge And Vert <= Bleu
LePlusPetit = Vert
ElseIf Bleu <= Rouge And Bleu <= Vert
LePlusPetit = Bleu
EndIf
ProcedureReturn LePlusPetit
EndProcedure
LePlusGrandNombre.f = LePlusGrand() / 100 * 47.05
LePlusPetitNombre.f = LePlusPetit() / 100 * 47.05
Luminositer = Round(LePlusGrandNombre.f + LePlusPetitNombre.f, #PB_Round_Nearest)
Debug Luminositer
D'une manière générale une couleur est exprimée en pourcentage de Bleue, de Rouge et de Vert.dayvid a écrit :Comment fait-on pour décomposer une couleur comme suit:
Savoir la Teinte d'une couleur
Savoir la saturation d'une couleur
Savoir la luminosité d'une couleur
Savoir la chrominances d'une couleur
Qu'est ce qu'une chrominances ?
Code : Tout sélectionner
Enumeration
#MainForm
#R
#RValue
#G
#GValue
#B
#BValue
#ColorRGB
#ColorRGBTemp
#ImgColor
EndEnumeration
R.l ;Recupération de la couleur Rouge
G.l ;Récupération de la couleur verte
B.l ;Récupération de la coleur Bleu
OpenWindow(#Mainform, 0, 0, 280, 360, "Color")
CreateImage(#ColorRGB, 260, 200)
ImageGadget(#ImgColor, 10, 10, 0, 0, ImageID(#ColorRGB))
;Couleur Rouge (Red)
TextGadget(#PB_Any, 5, 220, 20, 24, "(R)")
TrackBarGadget(#R, 20, 220, 190, 24, 0, 255)
StringGadget(#RValue, 220, 220, 50 , 22, "0", #PB_String_ReadOnly)
;Couleur Verte (Green)
TextGadget(#PB_Any, 5, 245, 20, 20, "(G)")
TrackBarGadget(#G, 20, 245, 190, 24, 0, 255)
StringGadget(#GValue, 220, 245, 50 , 22, "0", #PB_String_ReadOnly)
;Couleur Bleu (Blue)
TextGadget(#PB_Any, 5, 270, 20, 20, "(B)")
TrackBarGadget(#B, 20, 270, 190, 24, 0, 255)
StringGadget(#BValue, 220, 270, 50 , 22, "0", #PB_String_ReadOnly)
Repeat
Event = WaitWindowEvent()
Gadget = EventGadget()
Select Event
Case #PB_Event_Gadget
Select Gadget
Case #R
SetGadgetText(#RValue, Str(GetGadgetState(#R)))
Case #G
SetGadgetText(#GValue, Str(GetGadgetState(#G)))
Case #B
SetGadgetText(#BValue, Str(GetGadgetState(#B)))
EndSelect
R=GetGadgetState(#R)
G=GetGadgetState(#G)
B=GetGadgetState(#B)
CreateImage(#ColorRGBTemp, 260, 200)
StartDrawing(ImageOutput(#ColorRGBTemp))
Box(0, 0, 260, 200, RGB(R, G, B))
StopDrawing()
SetGadgetState(#ImgColor, ImageID(#ColorRGBTemp))
FreeImage(#ColorRGBTemp)
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Code : Tout sélectionner
Enumeration
#MainForm
#R
#RValue
#G
#GValue
#B
#BValue
#ColorRGB
#ColorRGBTemp
#ImgColor
#H
#HValue
EndEnumeration
R.l ;Recupération de la couleur Rouge
G.l ;Récupération de la couleur verte
B.l ;Récupération de la coleur Bleu
;Retourne la Saturation d'une couleur
Procedure RGBToHue(R,G,B)
Protected Dim ColorRGB(2)
Protected var_Min.i ;Min. value of RGB
Protected var_Max.i ;Max. value of RGB
Protected del_Max.i ;Delta RGB value
ColorRGB(0)=R
ColorRGB(1)=G
ColorRGB(2)=B
SortArray(ColorRGB(), #PB_Sort_Ascending)
var_Min=ColorRGB(0) ;Min. value of RGB
var_Max=ColorRGB(2) ;Max. value of RGB
del_Max = (var_Min + var_Max) / 2
If del_Max = 0 Or del_Max = 255
ProcedureReturn 0
Else
If del_Max < 256 / 2
ProcedureReturn (240 * (del_Max-var_Min) / (del_Max - 0))
Else
ProcedureReturn (240 * (var_Max - del_Max) / (256 - del_Max))
EndIf
EndIf
EndProcedure
OpenWindow(#Mainform, 0, 0, 280, 360, "Saturation")
CreateImage(#ColorRGB, 260, 200)
ImageGadget(#ImgColor, 10, 10, 0, 0, ImageID(#ColorRGB))
;Couleur Rouge (Red)
TextGadget(#PB_Any, 5, 220, 20, 24, "(R)")
TrackBarGadget(#R, 20, 220, 190, 24, 0, 255)
StringGadget(#RValue, 220, 220, 50 , 22, "0", #PB_String_ReadOnly)
;Couleur Verte (Green)
TextGadget(#PB_Any, 5, 245, 20, 20, "(G)")
TrackBarGadget(#G, 20, 245, 190, 24, 0, 255)
StringGadget(#GValue, 220, 245, 50 , 22, "0", #PB_String_ReadOnly)
;Couleur Bleu (Blue)
TextGadget(#PB_Any, 5, 270, 20, 20, "(B)")
TrackBarGadget(#B, 20, 270, 190, 24, 0, 255)
StringGadget(#BValue, 220, 270, 50 , 22, "0", #PB_String_ReadOnly)
;Saturation
TextGadget(#PB_Any, 5, 295, 20, 20, "(H)")
TrackBarGadget(#H, 20, 295, 190, 24, 0, 240)
DisableGadget(#H, #True)
StringGadget(#HValue, 220, 295, 50 , 22, "0", #PB_String_ReadOnly)
Repeat
Event = WaitWindowEvent()
Gadget = EventGadget()
Select Event
Case #PB_Event_Gadget
Select Gadget
Case #R
SetGadgetText(#RValue, Str(GetGadgetState(#R)))
Case #G
SetGadgetText(#GValue, Str(GetGadgetState(#G)))
Case #B
SetGadgetText(#BValue, Str(GetGadgetState(#B)))
EndSelect
R=GetGadgetState(#R)
G=GetGadgetState(#G)
B=GetGadgetState(#B)
CreateImage(#ColorRGBTemp, 260, 200)
StartDrawing(ImageOutput(#ColorRGBTemp))
Box(0, 0, 260, 200, RGB(R, G, B))
StopDrawing()
SetGadgetState(#ImgColor, ImageID(#ColorRGBTemp))
FreeImage(#ColorRGBTemp)
;Affichage de la saturation
SetGadgetText(#HValue, Str(RGBToHue(R,G,B)))
SetGadgetState(#H, Val(GetGadgetText(#Hvalue)))
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Code : Tout sélectionner
Global Rouge
Global Vert
Global Bleu
Enumeration
#Fenetre
#BoutonValider
#BoutonAnnuler
#TrackBarGadgetRouge
#TrackBarGadgetVert
#TrackBarGadgetBleu
#ImageCouleurRouge
#ImageCouleurVert
#ImageCouleurBleu
#ImageCouleurComposer
#ImageGadgetCouleurComposer
#ImageGadgetCouleurRouge
#ImageGadgetCouleurVert
#ImageGadgetCouleurBleu
#TexteNiveauDeRouge
#TexteNiveauDeVert
#TexteNiveauDeBleu
#TexteNiveauTeinte
#TexteNiveauSaturation
#TexteNiveauLuminosote
EndEnumeration
Procedure LePlusGrand()
If Rouge => Vert And Rouge => Bleu
LePlusGrand = Rouge
ElseIf Vert => Rouge And Vert => Bleu
LePlusGrand = Vert
ElseIf Bleu => Rouge And Bleu => Vert
LePlusGrand = Bleu
EndIf
ProcedureReturn LePlusGrand
EndProcedure
Procedure LePlusPetit()
If Rouge <= Vert And Rouge <= Bleu
LePlusPetit = Rouge
ElseIf Vert <= Rouge And Vert <= Bleu
LePlusPetit = Vert
ElseIf Bleu <= Rouge And Bleu <= Vert
LePlusPetit = Bleu
EndIf
ProcedureReturn LePlusPetit
EndProcedure
Procedure RGBToHue(Rouge, Vert, Bleu)
Protected Dim ColorRGB(2)
Protected var_Min.i ;Min. value of RGB
Protected var_Max.i ;Max. value of RGB
Protected del_Max.f ;Delta RGB value
ColorRGB(0)=Rouge
ColorRGB(1)=Vert
ColorRGB(2)=Bleu
SortArray(ColorRGB(), #PB_Sort_Ascending)
var_Min=ColorRGB(0) ;Min. value of RGB
var_Max=ColorRGB(2) ;Max. value of RGB
del_Max = (var_Min + var_Max) / 2
If del_Max = 0 Or del_Max = 255
ProcedureReturn 0
Else
If del_Max < 256 / 2
ProcedureReturn Round((240 * (del_Max-var_Min) / (del_Max - 0)), #PB_Round_Nearest)
Else
ProcedureReturn Round((240 * (var_Max - del_Max) / (256 - del_Max)), #PB_Round_Nearest)
EndIf
EndIf
EndProcedure
Procedure ChangeCouleur(Couleur)
UseGadgetList(WindowID(#Fenetre))
CreateImage(#ImageCouleurComposer, 360, 160)
StartDrawing(ImageOutput(#ImageCouleurComposer))
Box(0, 0, 360, 280, Couleur)
StopDrawing()
SetGadgetState(#ImageGadgetCouleurComposer, ImageID(#ImageCouleurComposer))
LePlusGrandNombre.f = LePlusGrand() / 100 * 47.05
LePlusPetitNombre.f = LePlusPetit() / 100 * 47.05
NiveauLuminosite = Round(LePlusGrandNombre.f + LePlusPetitNombre.f, #PB_Round_Nearest)
SetGadgetText(#TexteNiveauDeRouge, "Niveau de rouge: " + Str(Rouge))
SetGadgetText(#TexteNiveauDeVert, "Niveau de vert: " + Str(Vert))
SetGadgetText(#TexteNiveauDeBleu, "Niveau de bleu: " + Str(Bleu))
SetGadgetText(#TexteNiveauTeinte, " Teinte: " + Str(NiveauTeinte))
SetGadgetText(#TexteNiveauSaturation, " Saturation: " + Str(RGBToHue(Rouge, Vert, Bleu)))
SetGadgetText(#TexteNiveauLuminosote, " Luminosité: " + Str(NiveauLuminosite))
EndProcedure
Procedure FenetreCouleur()
If OpenWindow(#Fenetre, 439, 170, 400, 400, "Fenêtre", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
ButtonGadget(#BoutonValider, 122, 360, 75, 25, "Valider")
ButtonGadget(#BoutonAnnuler, 212, 360, 75, 25, "Annuler")
TextGadget(#TexteNiveauDeRouge, 25, 305, 120, 20, "Niveau de rouge: " + Str(Rouge))
TextGadget(#TexteNiveauDeVert, 150, 305, 120, 20, "Niveau de vert: " + Str(Vert))
TextGadget(#TexteNiveauDeBleu, 275, 305, 120, 20, "Niveau de bleu: " + Str(Bleu))
TextGadget(#TexteNiveauTeinte, 25, 325, 120, 20, " Teinte: " + Str(NiveauTeinte))
TextGadget(#TexteNiveauSaturation, 150, 325, 120, 20, " Saturation: " + Str(NiveauDeSaturation))
TextGadget(#TexteNiveauLuminosote, 275, 325, 120, 20, " Luminosité: " + Str(NiveauLuminosite))
CreateImage(#ImageCouleurRouge, 356, 20)
StartDrawing(ImageOutput(#ImageCouleurRouge))
Box(0, 0, 360, 20, 0)
X = 1
For R = 0 To 255
X + 2
Box(X, 0, 2, 20, RGB(R, 0, 0))
Next
StopDrawing()
CreateImage(#ImageCouleurVert, 356, 20)
StartDrawing(ImageOutput(#ImageCouleurVert))
Box(0, 0, 360, 20, 0)
X = 1
For V = 0 To 255
X + 2
Box(X, 0, 2, 20, RGB(0, V, 0))
Next
StopDrawing()
CreateImage(#ImageCouleurBleu, 356, 20)
StartDrawing(ImageOutput(#ImageCouleurBleu))
Box(0, 0, 360, 20, 0)
X = 1
For B = 0 To 255
X + 2
Box(X, 0, 2, 20, RGB(0, 0, B))
Next
StopDrawing()
CreateImage(#ImageCouleurComposer, 360, 160)
StartDrawing(ImageOutput(#ImageCouleurComposer))
Box(0, 0, 360, 280, 0)
StopDrawing()
ImageGadget(#ImageGadgetCouleurComposer, 20, 20, 380, 160, ImageID(#ImageCouleurComposer))
ImageGadget(#ImageGadgetCouleurRouge, 22, 210, 360, 160, ImageID(#ImageCouleurRouge))
ImageGadget(#ImageGadgetCouleurVert, 22, 240, 360, 160, ImageID(#ImageCouleurVert))
ImageGadget(#ImageGadgetCouleurBleu, 22, 270, 360, 160, ImageID(#ImageCouleurBleu))
TrackBarGadget(#TrackBarGadgetRouge, 10, 200, 380, 25, 0, 255)
TrackBarGadget(#TrackBarGadgetVert, 10, 230, 380, 25, 0, 255)
TrackBarGadget(#TrackBarGadgetBleu, 10, 260, 380, 25, 0, 255)
Repeat ; Start of the event loop
Event = WaitWindowEvent(1) ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
EventMenu = EventMenu() ; The event Menu
If Event = #PB_Event_Gadget
If GadgetID = #TrackBarGadgetRouge
Rouge = GetGadgetState(#TrackBarGadgetRouge)
ChangeCouleur(RGB(Rouge, Vert, Bleu))
ElseIf GadgetID = #TrackBarGadgetVert
Vert = GetGadgetState(#TrackBarGadgetVert)
ChangeCouleur(RGB(Rouge, Vert, Bleu))
ElseIf GadgetID = #TrackBarGadgetBleu
Bleu = GetGadgetState(#TrackBarGadgetBleu)
ChangeCouleur(RGB(Rouge, Vert, Bleu))
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
EndIf
EndProcedure
FenetreCouleur()
Ton programme affiche bien la teinte pour chaque couleur de base (Rouge, Vert, Bleu).Teinte d'une couleur : La teinte est la forme pure d'une couleur, c'est-à-dire sans adjonction, ni de blanc, ni de noir, ni de gris allant généralement de 0 à 255
Tu peux utiliser les commandes Red() Green() et Blue() pour déterminer la teinte d'une couleur dont tu ne connais pas la composition RGB (Red Green Blue)
Code : Tout sélectionner
Global LePlusGrand.l, LePlusPetit.i
Procedure LePlusPetitLePlusGrand(Rouge, Vert, Bleu)
Protected Dim ColorRGB(2) ;Tableau à trois dimensions
;On place les trois couleurs dans le tableau
ColorRGB(0)=Rouge
ColorRGB(1)=Vert
ColorRGB(2)=Bleu
;Tri du tableau
SortArray(ColorRGB(), #PB_Sort_Ascending)
LePlusPetit=ColorRGB(0)
LePlusGrand=ColorRGB(2)
EndProcedure
LePlusPetitLePlusGrand(125, 240, 50)
Debug LePlusGrand
Debug LePlusPetit
ça me réjoui que cella te plaiseBravo Dayvid![]()
Oui éffectivement, un petit oublieQuelques remarques: Les bouton Annuler et Valider ne servent à rien dans ton programme.
Ou alors c'est moi qui est bouchéTu dis que tu ne sais pas calculé la teinte ? Je vois que tu n'as pas suivi mes explications à moins que je ne sois pas assez clair
Ce n'est pas mon genredayvid a écrit :Pas taper hein