Code : Tout sélectionner
;***********************************************
;Titre :*Palette_gadget
;Auteur : Zorro
;***********************************************
;}
Declare.l event_palette_gadget(num) ; a Mettre en Boucle principal
Declare Palette_gadget(num,x,y,cadre=0,titre$=""); a Mettre apres Openwindow()
Declare event_palette_gadget_alpha(num,alpha.c)
;{- ***** initialisation du gadget Palette ******************
Structure Pal ; initialisation du gadget palette
x.i
y.i
largeur.i
hauteur.i
Couleur_hex.s ; pour la couleur Hexa
Couleur.i ; la couleur
Rouge.i ; composante rouge
Vert.i ; composante Verte
Bleu.i ;composante bleu
Alpha.c ; valeur Alpha
image_cadrillage.i
image_palette.i
cadre.b
titre.s
EndStructure
Global Dim Pal.Pal(10) ; valable pour 10 gadget palettes
Global Fnt=LoadFont (#Pb_any, "Arial", 6)
;} ****************************************************
Enumeration 1 step 2
#palette
#trackbarr1
#palette2
#trackbarr2
EndEnumeration
If OpenWindow(0, 0, 0, 800, 600, "Pick_color", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; dessin du gadget palette sans cadre avec le trackbarr
Larg=276 :haut=276
Palette_gadget(#palette,20,30,0,"") :TrackBarGadget(#trackbarr1, Larg+25, y, 20, Haut, 0, 255,#PB_TrackBar_Vertical):SetGadgetState(#trackbarr1,255)
; dessin du gadget palette Avec cadre
Palette_gadget(#palette2,400,30,1,"Palette 2 By Zorro") :TrackBarGadget(#trackbarr2, 400+Larg+25, y, 20, Haut, 0, 255,#PB_TrackBar_Vertical):SetGadgetState(#trackbarr2,255)
Repeat
Event = WaitWindowEvent(2)
Select Event
Case #PB_Event_Gadget
select EventGadget()
case #palette
retour=event_palette_gadget(#palette) ; envoi l'event au gadget Palette , qui retourne la couleur choisie dans la Structure
if retour<>-1
debug "couleur Palette 1="+ Pal(#palette)\couleur.i; affiche la couleur de la Structure
debug "composante Palette 1= "+"Rouge "+Pal(#palette)\rouge.i+" Vert "+Pal(#palette)\vert.i+" Bleu "+Pal(#palette)\bleu.i + "Alpha "+Pal(#palette)\alpha.c ; retourne les composantes de la couleur choisie, present dans la structure
Debug "retour de la couleur en Hexa :" +Pal(#palette)\Couleur_hex.s
Debug " ************************************************************************"
Endif
Case #trackbarr1 ; on touche le trackbarr de la palette 1
alpha.c=GetGadgetState(#trackbarr1) ; recupere l'alpha du tracbar; et l'envoi a la procedure chargé de faire le boulot
event_palette_gadget_alpha( #palette,alpha.c)
case #palette2
retour=event_palette_gadget(#palette2) ; envoi l'event au gadget Palette , qui retourne la couleur choisie dans la Structure
if retour<>-1
debug "couleur Palette 2="+ Pal(#palette2)\couleur.i; affiche la couleur de la Structure
debug "composante Palette 2= "+"Rouge "+Pal(#palette2)\rouge.i+" Vert "+Pal(#palette2)\vert.i+" Bleu "+Pal(#palette2)\bleu.i + "Alpha "+Pal(#palette2)\alpha.c ; affiche les composantes de la couleur choisie, present dans la structure
Debug "retour de la couleur en Hexa :" +Pal(#palette2)\Couleur_hex.s
Debug " ************************************************************************"
Endif
Case #trackbarr2
alpha.c=GetGadgetState(#trackbarr2) ; recupere l'alpha du tracbar; et l'envoi a la procedure chargé de faire le boulot
event_palette_gadget_alpha( #palette2,alpha.c)
Endselect
Endselect
Until Event = #PB_Event_CloseWindow
Endif
;-** Zone Procedure ***************
Procedure.l event_palette_gadget(num) ; event_palette_gadget(numero du gadget)
;By Zorro
; retourne la couleur choisie
Static Flag_c ,mem_Flag_c
Select EventType()
Case #PB_EventType_MouseEnter, #PB_EventType_MouseMove
Capture = 1
x1 = GetGadgetAttribute(num, #PB_Canvas_MouseX)
y1 = GetGadgetAttribute(num, #PB_Canvas_MouseY)
If StartDrawing(imageOutput(pal(num)\image_palette))
If (x1 >= 0 And x1 <=255) And (y1 >=0 And y1 <=275)
Pal(num)\Couleur.i = Point(x1,y1)
StopDrawing()
StartDrawing(CanvasOutput(num))
Box (257,0,20,128,Pal(num)\Couleur.i)
Flag_c=Pal(num)\couleur.i
if mem_Flag_c<>Flag_c
h$=RSet (Hex(Red(Pal(num)\couleur.i)),2,"0") + RSet (Hex(Green(Pal(num)\couleur.i)),2,"0") + RSet (Hex(Blue(Pal(num)\couleur.i)),2,"0")+RSet (Hex(Alpha(Pal(num)\couleur.i)),2,"0")
DrawingFont(FontID(Fnt))
DrawText( 160,256, Space(32) )
DrawText( 160,256, "Hex : "+ h$ )
DrawText( 160,266, Space(32) )
DrawText( 160,266, "R : "+Red(Pal(num)\couleur.i)+" V:"+Green(Pal(num)\couleur.i)+" B:"+Blue(Pal(num)\couleur.i)+" A:"+Pal(num)\alpha.c+ " " )
mem_Flag_c=Flag_c
Endif
EndIf
StopDrawing()
;ProcedureReturn
EndIf
Case #PB_EventType_LeftClick
Capture = 0
;-***** pointage souris ************
x1 = GetGadgetAttribute(num, #PB_Canvas_MouseX)
y1 = GetGadgetAttribute(num, #PB_Canvas_MouseY)
; ********************************
If StartDrawing(imageOutput(pal(num)\image_palette))
If (x1 >= 0 And x1 <=255) And (y1 >=0 And y1 <=275)
Pal(num)\Couleur.i = Point(x1,y1)
StopDrawing()
StartDrawing(CanvasOutput(num))
Box (257,129,20,128,Pal(num)\Couleur.i)
; met les composantes dans la structure
Pal(num)\rouge.i=Red(Pal(num)\Couleur.i)
Pal(num)\vert.i=Green(Pal(num)\Couleur.i)
Pal(num)\bleu.i=Blue(Pal(num)\Couleur.i)
; //Ajout Ar-S 21/06/14 - 17h06//
Pal(num)\Couleur_hex.s = RSet (Hex(Red(Pal(num)\couleur.i)),2,"0") + RSet (Hex(Green(Pal(num)\couleur.i)),2,"0") + RSet (Hex(Blue(Pal(num)\couleur.i)),2,"0")+ RSet (Hex(Alpha(Pal(num)\couleur.i)),2,"0") ; met la couleur Hex dans la structure
EndIf
StopDrawing()
ProcedureReturn
EndIf
Default
Capture = 0
EndSelect
ProcedureReturn -1
EndProcedure
Procedure Palette_gadget(num,x,y,cadre=0,titre$="");Palette_gadget(numero du gadget,x,y,largeur,hauteur)
; By Zorro
; Affiche le Gadget Palette
Larg=276 :haut=276
Pal(num)\cadre=cadre
Pal(num)\titre.s=titre$
Pal(num)\x=x
Pal(num)\y=y
Pal(num)\largeur=Larg
Pal(num)\hauteur=haut
Pal(num)\alpha.c=255
pal(num)\image_cadrillage=CreateImage(#Pb_Any,larg,haut,32,$0)
pal(num)\image_palette=CreateImage(#Pb_Any,256,256,32,$0)
if cadre=1
FrameGadget(#PB_Any, x-25, y-20, Larg+25, Haut+20, titre$)
Endif
CanvasGadget(num, x,y,larg,haut)
;;If StartDrawing(CanvasOutput(num))
If StartDrawing(imageOutput(pal(num)\image_cadrillage))
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,255,255,RGB(255,255,255))
For Y=0 To 255-8
For X=D To 255-8
Box(X,Y,8,8,$D3D3D3)
X+(8*2)
Next
Y+8
If D=0
D=8
Else
D=0
EndIf
Next y
StopDrawing()
Endif
If StartDrawing(imageOutput(pal(num)\image_palette))
DrawingMode(#PB_2DDrawing_Default)
;{ Palette Graph100
For y=0 to 255
For x=0 to 255
abscisse.f=x:Ordonne.f=y: max.f=256: maxY.f=256
Protected couleur, taux.f, index1.f, index2.f, index3.f, index4.f, index5.f
index1.f = max / 6
index2.f = 2 * max / 6
index3.f = 3 * max / 6
index4.f = 4 * max / 6
index5.f = 5 * max / 6
If Ordonne * 2 / maxY > 1
abscisse - index1
If abscisse < 0 : abscisse + max : EndIf
EndIf
If abscisse >= 0 And abscisse <= index1
couleur = RGB(255, (((abscisse * max) / index1) * 255) / max, 0)
EndIf
If abscisse > index1 And abscisse <= index2
couleur = RGB(((max - ((abscisse - index1) * max) / index1) * 255) / max, 255, 0)
EndIf
If abscisse > index2 And abscisse <= index3
couleur = RGB(0, 255, ((((abscisse - index2) * max) / index1) * 255) / max)
EndIf
If abscisse > index3 And abscisse <= index4
couleur = RGB(0, ((max - ((abscisse - index3) * max) / index1) * 255) / max, 255)
EndIf
If abscisse > index4 And abscisse <= index5
couleur = RGB(((abscisse - index4) * 255) / index1, 0, 255)
EndIf
If abscisse > index5 And abscisse <= max
couleur = RGB(255, 0, ((max - ((abscisse - index5) * max) / index1) * 255) / max)
EndIf
taux.f = Ordonne * 2 / maxY
If taux <= 1
couleur = RGB(taux * Red(couleur), taux * Green(couleur), taux * Blue(couleur))
Else
taux - 2
couleur = RGB(255 + taux * Green(couleur), 255 + taux * Blue(couleur), 255 + taux * Red(couleur))
EndIf
x1=x+1
y1=y+1
if x1>255:x1=255:endif
if y1>255:y1=255:endif
;R=Red(couleur) :V=Green(couleur):B=blue(couleur):A=alpha.c
;couleur=RGB(R,V,B)
plot(x1,y1,couleur)
Next x
Next y
xb=0
Box(xb,256,20,20,rgb(0,0,0))
xb=xb+20
Box(xb,256,20,20,rgb(255,255,255))
xb=xb+20
Box(xb,256,20,20,rgb(255,0,0))
xb=xb+20
Box(xb,256,20,20,rgb(255,255,0))
xb=xb+20
Box(xb,256,20,20,rgb(0,255,0))
xb=xb+20
Box(xb,256,20,20,rgb(0,255,255))
xb=xb+20
Box(xb,256,20,20,rgb(0,0,255))
xb=xb+20
Box(xb,256,20,20,rgb(255,0,255))
;}
StopDrawing()
Endif
; dessin de la palette+cadrillage
event_palette_gadget_alpha(num,255) ; force la transparence a 255 , car lors de la création, il faut pouvoir le voir
;;;
Endprocedure
Procedure event_palette_gadget_alpha(num,alpha.c)
Pal(num)\alpha.c=alpha.c
; dessin du cadrillage et de la palette
If StartDrawing(CanvasOutput(num))
DrawingMode(#PB_2DDrawing_AlphaBlend )
DrawAlphaImage(ImageId(pal(num)\image_cadrillage),0,0,255);
DrawAlphaImage(ImageId(pal(num)\image_palette),0,0 ,Pal(num)\alpha.c)
StopDrawing()
EndIf
Endprocedure