Voilà un petit programme basic mais il manque la teinte que je ne sais pas calculer, sinon sa marche niquel
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()