J'ai mis à jour mon sélecteur de couleur. La grosse nouveauté est le support de la couche Alpha.
Le code est disponible ici, il se présente sous la forme d'une Userlibrary et du code source compilable avec TailBite :
http://www.lsi-dev.com/index.php?mod=do ... erid&id=42
J'ai également réalisé à partir de ce code 2 programmes :
- Un programme configurable comme outil dans l'éditeur de PureBasic ou dans jaPBe
- Un plugin pour jaPBe
Ils sont avec le code (voir lien ci-dessus)
En image, c'est plus clair



Les informations affichées en bas de la fenêtre sont entièrement configurable, vous pouvez mettre tout ce qui vous passe par la tête.

Un autre exemple
Et pour les curieux, je mets le code ici, mais il faut faut les images que vous trouverez dans le lien ci-dessus. A compiler avec le debugguer
Code : Tout sélectionner
CompilerIf #PB_Compiler_Debugger
ProcedureDLL GetColor2(Color.l, Text.s, DisplayAlpha.l, ParentWindow.l) ; Color requester
CompilerElse
ProcedureDLL GetColor(Color.l, Text.s, DisplayAlpha.l, ParentWindow.l) ; Color requester
CompilerEndIf
EnableExplicit
Protected Image_Bleu, Image_Rouge, Image_Vert, Image_Alpha, Image_Degrade, Image_Dessin, Image_Curseur_ArcEnCiel, Image_Curseur_Couleur, Image_ArcEnCiel, Image_SelectionAlpha
Protected Icone_Valider, Icone_Annuler, Icone_Capture, Icone_Selection, Icone_Haut, Icone_Bas
Protected Gadget_Bleu, Gadget_Rouge, Gadget_Vert, Gadget_Alpha, Gadget_Valider, Gadget_Annuler, Gadget_Capture, Gadget_CouleurStandard
Protected ArcEnCiel, Nuance, Dessine, Rafraichir
Protected Fenetre, Fond, Event, Quitter
Structure GetColor_Capture
Fenetre.i
Image.i
EndStructure
Protected NewList Capture.GetColor_Capture()
Protected Capture_ZoomFenetre, Capture_Ecran, Capture_Couleur, Capture_ZoomImage
Protected Couleur, CouleurOriginale
Protected Nuance_Couleur, Nuance_X, Nuance_Y, ArcEnCiel_Y, ArcEnCiel_Origine
Protected Rouge, Bleu, Vert, Alpha, Teinte, Luminosite, Saturation
Protected Souris_Nuance, Souris_ArcEnCiel, Souris_Rouge, Souris_Vert, Souris_Bleu, Souris_Alpha, Souris_Selection
Protected Souris_Zone.RECT, Souris_NouvelleZone.RECT
Protected Calcul.d, x, y, Index
Protected Dim ArcEnCiel_Couleur(3060)
Protected Title.s, Texte.s
Structure GetColor_Info
x.i
y.i
L.i
Texte.s
Variable.i
Gadget.i
EndStructure
Protected NewList Info.GetColor_Info()
Structure CouleurStandardInfo
Couleur.l
Image.l
Marque.b
EndStructure
NewList CouleurStandard.CouleurStandardInfo()
DataSection
Icone_Capture :
IncludeBinary "Capture.ico"
Icone_Valider :
IncludeBinary "Valider.ico"
Icone_Annuler :
IncludeBinary "Annuler.ico"
Icone_Selection :
IncludeBinary "Selection.ico"
Icone_Haut :
IncludeBinary "Haut.ico"
Icone_Bas :
IncludeBinary "Bas.ico"
EndDataSection
;{ Paramètres
#GetColor_Couleur_H = 10
#GetColor_G_Couleur_L = 32
#GetColor_G_Couleur_H = 20
#GetColor_ArcEnCiel_L = 20
#GetColor_Espace = 12
#GetColor_Contour = $60000000
#GetColor_Selection_L = 48
#GetColor_Selection_H = 64
#GetColor_CouleurStandard_H = 28
#GetColor_Bouton_L = 48
#GetColor_Bouton_H = 40
#GetColor_CouleurDefaut = $E0A030
#GetColor_Text_H = 20
#GetColor_Text_Espace = 2
#GetColor_L = #GetColor_Espace + 256 + #GetColor_Espace + #GetColor_ArcEnCiel_L + #GetColor_Espace + #GetColor_Bouton_L + #GetColor_Espace
#GetColor_H = #GetColor_Espace + 256 + #GetColor_Espace + #GetColor_Couleur_H + #GetColor_Espace + #GetColor_Couleur_H + #GetColor_Espace + #GetColor_Couleur_H + #GetColor_Espace
#GetColor_ArcEnCiel_H = #GetColor_H - 2 * #GetColor_Espace
#GetColor_ArcEnCiel_X = #GetColor_Espace
#GetColor_ArcEnCiel_Y = #GetColor_Espace
#GetColor_Nuancier_X = #GetColor_ArcEnCiel_X + #GetColor_Espace + #GetColor_ArcEnCiel_L
#GetColor_Nuancier_Y = #GetColor_Espace
#GetColor_Selection_X = #GetColor_Nuancier_X + 256 + #GetColor_Espace
#GetColor_Selection_Y = #GetColor_Nuancier_Y
#GetColor_R_X = #GetColor_Nuancier_X
#GetColor_R_Y = #GetColor_Espace + 256 + #GetColor_Espace
#GetColor_G_X = #GetColor_Nuancier_X
#GetColor_G_Y = #GetColor_R_Y + #GetColor_Couleur_H + #GetColor_Espace
#GetColor_B_X = #GetColor_Nuancier_X
#GetColor_B_Y = #GetColor_G_Y + #GetColor_Couleur_H + #GetColor_Espace
#GetColor_A_X = #GetColor_Nuancier_X
#GetColor_A_Y = #GetColor_B_Y + #GetColor_Couleur_H + #GetColor_Espace
#GetColor_G_R_X = #GetColor_Nuancier_X + 256 + #GetColor_Espace
#GetColor_G_R_Y = #GetColor_R_Y + (#GetColor_Couleur_H - #GetColor_G_Couleur_H) / 2
#GetColor_G_G_X = #GetColor_Nuancier_X + 256 + #GetColor_Espace
#GetColor_G_G_Y = #GetColor_G_Y + (#GetColor_Couleur_H - #GetColor_G_Couleur_H) / 2
#GetColor_G_B_X = #GetColor_Nuancier_X + 256 + #GetColor_Espace
#GetColor_G_B_Y = #GetColor_B_Y + (#GetColor_Couleur_H - #GetColor_G_Couleur_H) / 2
#GetColor_G_A_X = #GetColor_Nuancier_X + 256 + #GetColor_Espace
#GetColor_G_A_Y = #GetColor_A_Y + (#GetColor_Couleur_H - #GetColor_G_Couleur_H) / 2
#GetColor_Annuler_X = #GetColor_Nuancier_X + 256 + #GetColor_Espace
#GetColor_Annuler_Y = #GetColor_Nuancier_Y + 256 - #GetColor_Bouton_H
#GetColor_Valider_X = #GetColor_Nuancier_X + 256 + #GetColor_Espace
#GetColor_Valider_Y = #GetColor_Annuler_Y - #GetColor_Bouton_H
#GetColor_Capture_X = #GetColor_Nuancier_X + 256 + #GetColor_Espace
#GetColor_Capture_Y = #GetColor_Valider_Y - #GetColor_Bouton_H - #GetColor_Espace
#GetColor_CouleurStandard_X = #GetColor_Selection_X
#GetColor_CouleurStandard_Y = #GetColor_Selection_Y + #GetColor_Selection_H + 2
#GetColor_Capture_Zoom = 7
#GetColor_Capture_Taille = 8
#GetColor_Capture_Decalage = 16
#CouleurStandard_Pas_NoirBlanc = 32
#CouleurStandard_Pas_Couleur = 64
#CouleurStandard_Marqueur = "-"
;}
;{ Chargement des icônes
Icone_Valider = CatchImage(#PB_Any, ?Icone_Valider)
Icone_Annuler = CatchImage(#PB_Any, ?Icone_Annuler)
Icone_Capture = CatchImage(#PB_Any, ?Icone_Capture)
Icone_Selection = CatchImage(#PB_Any, ?Icone_Selection)
Icone_Haut = CatchImage(#PB_Any, ?Icone_haut)
Icone_Bas = CatchImage(#PB_Any, ?Icone_Bas)
;}
;{ Dégradé
; Cette image est appliqué sur une couleur pour créer le nuancier
Image_Degrade = CreateImage(#PB_Any, 256, 256, 32)
StartDrawing(ImageOutput(Image_Degrade))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 256, 256, 0)
DrawingMode(#PB_2DDrawing_AlphaBlend)
For x = 0 To 255
For y = 0 To 255
Plot(255 - x, y, RGBA($FF, $FF, $FF, x))
Plot(255 - x, y, RGBA(0, 0, 0, y))
Next
Next
StopDrawing()
;}
;{ Couleurs
Image_Rouge = CreateImage(#PB_Any, 256, #GetColor_Couleur_H, 32)
StartDrawing(ImageOutput(Image_Rouge))
DrawingMode(#PB_2DDrawing_AlphaBlend)
For x = 0 To 255
Line(x, 0, 1, #GetColor_Couleur_H, RGBA(x, 0, 0, $FF))
Next
StopDrawing()
Image_Vert = CreateImage(#PB_Any, 256, #GetColor_Couleur_H, 32)
StartDrawing(ImageOutput(Image_Vert))
DrawingMode(#PB_2DDrawing_AlphaBlend)
For x = 0 To 255
Line(x, 0, 1, #GetColor_Couleur_H, RGBA(0, x, 0, $FF))
Next
StopDrawing()
Image_Bleu = CreateImage(#PB_Any, 256, #GetColor_Couleur_H, 32)
StartDrawing(ImageOutput(Image_Bleu))
DrawingMode(#PB_2DDrawing_AlphaBlend)
For x = 0 To 255
Line(x, 0, 1, #GetColor_Couleur_H, RGBA(0, 0, x, $FF))
Next
StopDrawing()
If DisplayAlpha
Image_Alpha = CreateImage(#PB_Any, 256, #GetColor_Couleur_H, 32)
StartDrawing(ImageOutput(Image_Alpha))
DrawingMode(#PB_2DDrawing_AlphaBlend)
For x = 0 To 255 Step #GetColor_Couleur_H
Box(x, 0, #GetColor_Couleur_H / 2, #GetColor_Couleur_H / 2, $FF303030)
Box(x, #GetColor_Couleur_H / 2, #GetColor_Couleur_H / 2, #GetColor_Couleur_H / 2, $FFD0D0D0)
Box(x + #GetColor_Couleur_H / 2, 0, #GetColor_Couleur_H / 2, #GetColor_Couleur_H / 2, $FFD0D0D0)
Box(x + #GetColor_Couleur_H / 2, #GetColor_Couleur_H / 2, #GetColor_Couleur_H / 2, #GetColor_Couleur_H / 2, $FF303030)
Next
For x = 0 To 255
Line(x, 0, 1, #GetColor_Couleur_H, RGBA(128, 128, 128, x))
Next
StopDrawing()
Image_SelectionAlpha = CreateImage(#PB_Any, #GetColor_Selection_L, #GetColor_Selection_H, 32 | #PB_Image_Transparent)
StartDrawing(ImageOutput(Image_SelectionAlpha))
DrawingMode(#PB_2DDrawing_AlphaBlend)
For y = 0 To #GetColor_Selection_H Step #GetColor_Selection_L / 4
For x = 0 To #GetColor_Selection_L Step #GetColor_Selection_L / 4
Box(x, y, #GetColor_Selection_L / 8, #GetColor_Selection_L / 8, $FF303030)
Box(x, y + #GetColor_Selection_L / 8, #GetColor_Selection_L / 8, #GetColor_Selection_L / 8, $FFD0D0D0)
Box(x + #GetColor_Selection_L / 8, y, #GetColor_Selection_L / 8, #GetColor_Selection_L / 8, $FFD0D0D0)
Box(x + #GetColor_Selection_L / 8, y + #GetColor_Selection_L / 8, #GetColor_Selection_L / 8, #GetColor_Selection_L / 8, $FF303030)
Next
Next
StopDrawing()
EndIf
Image_Dessin = CreateImage(#PB_Any, #GetColor_L, #GetColor_H + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha, 32)
StartDrawing(ImageOutput(Image_Dessin))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, #GetColor_L, #GetColor_H + #GetColor_Couleur_H + #GetColor_Espace, 0)
StopDrawing()
;}
;{ Curseur couleur rouge, vert, et bleu
Image_Curseur_Couleur = CreateImage(#PB_Any, 3, #GetColor_Couleur_H + 6, 32)
StartDrawing(ImageOutput(Image_Curseur_Couleur))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 3, #GetColor_Couleur_H + 6, 0)
DrawingMode(#PB_2DDrawing_AlphaBlend)
For y = 0 To #GetColor_Couleur_H + 6 - 1
Calcul = y / (#GetColor_Couleur_H + 6 - 1)
Calcul = 4 * Calcul - 4 * Calcul * Calcul
Couleur = $FF * Calcul
Couleur = RGBA(Couleur, Couleur, Couleur, $FF)
Plot(0, y, Couleur)
Plot(2, y, Couleur)
Next
StopDrawing()
;}
;{ Curseur arc en ciel
Image_Curseur_ArcEnCiel = CreateImage(#PB_Any, #GetColor_ArcEnCiel_L + 6, 3, 32)
StartDrawing(ImageOutput(Image_Curseur_ArcEnCiel))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, #GetColor_ArcEnCiel_L + 6, 3, 0)
DrawingMode(#PB_2DDrawing_AlphaBlend)
For x = 0 To #GetColor_ArcEnCiel_L + 6 - 1
Calcul = x / (#GetColor_ArcEnCiel_L + 6 - 1)
Calcul = 4 * Calcul - 4 * Calcul * Calcul
Couleur = $FF * Calcul
Couleur = RGBA(Couleur, Couleur, Couleur, $FF)
Plot(x, 0, Couleur)
Plot(x, 2, Couleur)
Next
StopDrawing()
;}
;{ Couleur de l'arc en ciel
Rouge = 255
Vert = 0
Bleu = -1
y = 0
For x = 0 To 3060
Select y
Case 0
Bleu + 1
If Bleu = 255
y + 1
EndIf
Case 1
Rouge - 1
If Rouge = 0
y + 1
EndIf
Case 2
Vert + 1
If Vert = 255
y + 1
EndIf
Case 3
Bleu - 1
If Bleu = 0
y + 1
EndIf
Case 4
Rouge + 1
If Rouge = 255
y + 1
EndIf
Case 5
Vert - 1
If Vert = 0
y = 0
EndIf
EndSelect
ArcEnCiel_Couleur(x) = RGB(Rouge, Vert, Bleu)
; Debug RSet(Hex(ArcEnCiel_Couleur(x)), 6, "0")
Next
Image_ArcEnCiel = CreateImage(#PB_Any, #GetColor_ArcEnCiel_L, #GetColor_ArcEnCiel_H + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha, 32)
;}
;{ Création de la liste des couleurs
; Nuance de gris
For x = 0 To 255 Step #CouleurStandard_Pas_NoirBlanc
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, x, x)
If x = 128
CouleurStandard()\Marque = 1
EndIf
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = $FFFFFF
; Rouge
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, 0, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 0) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, x, x)
Next
; Rose
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, 0, x / 2)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 128) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, x, 128 + x / 2)
Next
; Mauve
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, 0, x)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 0, 255) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, x, 255)
Next
; Vxolet
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x / 2, 0, x)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128, 0, 255) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128 + x / 2, x, 255)
Next
; Bleu
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 0, x)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 0, 255) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, x, 255)
Next
; Bleu ciel
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, x / 2, x)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 128, 255) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, 128 + x / 2, 255)
Next
; Cyan
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, x, x)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 255) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, 255, 255)
Next
; Vert d'eau
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, x, x / 2)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 128) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, 255, 128 + x / 2)
Next
; Vert
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, x, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(0, 255, 0) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, 255, x)
Next
; Vert clair
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x / 2, x, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128, 255, 0) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(128 + x / 2, 255, x)
Next
; Jaune
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, x, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 255, 0) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 255, x)
Next
; Orange
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(x, x / 2, 0)
Next
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 128, 0) : CouleurStandard()\Marque = 1
For x = #CouleurStandard_Pas_Couleur To 255 Step #CouleurStandard_Pas_Couleur
AddElement(CouleurStandard()) : CouleurStandard()\Couleur = RGB(255, 128 + x / 2, x)
Next
;}
;{ Analyse des textes
Title = StringField(Text, 1, Chr(10)) ; Titre de la fenetre
y = CountString(Text, Chr(10)) ; hauteur supplémentaire pour afficher les textes
For Index = 2 To y + 1
Texte = StringField(Text, Index, Chr(10))
Fond = CountString(Texte, Chr(9)) + 1
For x = 1 To Fond
AddElement(Info())
Info()\L = (#GetColor_L - 2 * #GetColor_Espace - (Fond - 1) * #GetColor_Text_Espace) / Fond
Info()\x = (x - 1) * ((#GetColor_L - 2 * #GetColor_Espace - (Fond - 1) * #GetColor_Text_Espace) / Fond + #GetColor_Text_Espace) + #GetColor_Espace
Info()\y = (Index - 2) * (#GetColor_Text_H + #GetColor_Text_Espace) + #GetColor_H
If DisplayAlpha ; Décalage si la composante Alpha est affichée
Info()\y + #GetColor_Couleur_H + #GetColor_Espace
EndIf
Info()\Texte = StringField(Texte, x, Chr(9))
Info()\Variable = CountString(Info()\Texte, "?")
Next
Next
If y
y * (#GetColor_Text_H + #GetColor_Text_Espace) + #GetColor_Espace
EndIf
;}
;{ Affichage de la composante Alpha
If DisplayAlpha
y + #GetColor_Couleur_H + #GetColor_Espace
EndIf
;}
If IsWindow(ParentWindow)
DisableWindow(ParentWindow, 1)
Fenetre = OpenWindow(#PB_Any, 0, 0, #GetColor_L, #GetColor_H + y, Title, #PB_Window_SystemMenu | #PB_Window_WindowCentered | #PB_Window_Tool, WindowID(ParentWindow))
Else
Fenetre = OpenWindow(#PB_Any, 0, 0, #GetColor_L, #GetColor_H + y, Title, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Tool)
EndIf
If Fenetre
ResizeWindow(Fenetre, #PB_Ignore, #PB_Ignore, #GetColor_L, #GetColor_H + y)
StickyWindow(Fenetre, 1)
Fond = GetSysColor_(#COLOR_3DFACE)
SetWindowColor(Fenetre, Fond)
Fond = $FF000000 | Fond
;{ Gadgets
Gadget_CouleurStandard = ComboBoxGadget(#PB_Any, #GetColor_CouleurStandard_X, #GetColor_CouleurStandard_Y, #GetColor_Selection_L, #GetColor_CouleurStandard_H, #PB_ComboBox_Image)
ForEach CouleurStandard()
CouleurStandard()\Image = CreateImage(#PB_Any, 16, 16, 24)
StartDrawing(ImageOutput(CouleurStandard()\Image))
Box(0, 0, 16, 16, CouleurStandard()\Couleur)
StopDrawing()
If CouleurStandard()\Marque
AddGadgetItem(Gadget_CouleurStandard, -1, #CouleurStandard_Marqueur, ImageID(CouleurStandard()\Image))
Else
AddGadgetItem(Gadget_CouleurStandard, -1, " ", ImageID(CouleurStandard()\Image))
EndIf
Next
Gadget_Rouge = StringGadget(#PB_Any, #GetColor_G_R_X, #GetColor_G_R_Y, #GetColor_G_Couleur_L, #GetColor_G_Couleur_H, "", #PB_String_Numeric)
SetGadgetColor(Gadget_Rouge, #PB_Gadget_BackColor, $FFFFFF)
Gadget_Vert = StringGadget(#PB_Any, #GetColor_G_G_X, #GetColor_G_G_Y, #GetColor_G_Couleur_L, #GetColor_G_Couleur_H, "", #PB_String_Numeric)
SetGadgetColor(Gadget_Vert, #PB_Gadget_BackColor, $FFFFFF)
Gadget_Bleu = StringGadget(#PB_Any, #GetColor_G_B_X, #GetColor_G_B_Y, #GetColor_G_Couleur_L, #GetColor_G_Couleur_H, "", #PB_String_Numeric)
SetGadgetColor(Gadget_Bleu, #PB_Gadget_BackColor, $FFFFFF)
If DisplayAlpha
Gadget_Alpha = StringGadget(#PB_Any, #GetColor_G_A_X, #GetColor_G_A_Y, #GetColor_G_Couleur_L, #GetColor_G_Couleur_H, "", #PB_String_Numeric)
SetGadgetColor(Gadget_Alpha, #PB_Gadget_BackColor, $FFFFFF)
EndIf
Gadget_Valider = ButtonImageGadget(#PB_Any, #GetColor_Valider_X, #GetColor_Valider_Y, #GetColor_Bouton_L, #GetColor_Bouton_H, ImageID(Icone_Valider))
Gadget_Annuler = ButtonImageGadget(#PB_Any, #GetColor_Annuler_X, #GetColor_Annuler_Y, #GetColor_Bouton_L, #GetColor_Bouton_H, ImageID(Icone_Annuler))
Gadget_Capture = ButtonImageGadget(#PB_Any, #GetColor_Capture_X, #GetColor_Capture_Y, #GetColor_Bouton_L, #GetColor_Bouton_H, ImageID(Icone_Capture))
ForEach Info()
If Info()\Variable
Info()\Gadget = StringGadget(#PB_Any, Info()\x, Info()\y, Info()\L, #GetColor_Text_H, "", #PB_String_ReadOnly | #ES_CENTER)
SetGadgetColor(Info()\Gadget, #PB_Gadget_BackColor, $FFFFFF)
Else
Info()\Gadget = TextGadget(#PB_Any, Info()\x, Info()\y, Info()\L, #GetColor_Text_H, Info()\Texte, #PB_Text_Center | #SS_CENTERIMAGE)
EndIf
Next
;}
; Couleur
If DisplayAlpha
DisplayAlpha = 1
EndIf
CouleurOriginale = Color
Couleur = Color
; Dessiner les images
Dessine = 1
Nuance = 1
ArcEnCiel = 1
Repeat
Repeat
; Gestion des évènements
Select Event
Case #PB_Event_CloseWindow
Quitter = 1
Color = CouleurOriginale
Case #WM_LBUTTONDOWN
;{- Début clic souris
If Souris_Nuance = 0 And WindowMouseX(Fenetre) >= #GetColor_Nuancier_X And WindowMouseX(Fenetre) < #GetColor_Nuancier_X + 256 And WindowMouseY(Fenetre) >= #GetColor_Nuancier_Y And WindowMouseY(Fenetre) < #GetColor_Nuancier_Y + 256
ShowCursor_(0)
GetClipCursor_(Souris_Zone)
Souris_NouvelleZone\left = 0
Souris_NouvelleZone\top = 0
ClientToScreen_(WindowID(Fenetre), Souris_NouvelleZone)
Souris_NouvelleZone\left + #GetColor_Nuancier_X
Souris_NouvelleZone\top + #GetColor_Nuancier_Y
Souris_NouvelleZone\right = Souris_NouvelleZone\left + 256
Souris_NouvelleZone\bottom = Souris_NouvelleZone\top + 256
ClipCursor_(Souris_NouvelleZone)
Dessine = 1
Nuance_X = WindowMouseX(Fenetre) - #GetColor_Nuancier_X
Nuance_Y = WindowMouseY(Fenetre) - #GetColor_Nuancier_Y
Souris_Nuance = 1
SetActiveGadget(Gadget_Valider)
EndIf
If Souris_Rouge = 0 And WindowMouseX(Fenetre) >= #GetColor_R_X And WindowMouseX(Fenetre) < #GetColor_R_X + 256 And WindowMouseY(Fenetre) >= #GetColor_R_Y And WindowMouseY(Fenetre) < #GetColor_R_Y + #GetColor_Couleur_H
ShowCursor_(0)
GetClipCursor_(Souris_Zone)
Souris_NouvelleZone\left = 0
Souris_NouvelleZone\top = 0
ClientToScreen_(WindowID(Fenetre), Souris_NouvelleZone)
Souris_NouvelleZone\left + #GetColor_R_X
Souris_NouvelleZone\top + #GetColor_R_Y
Souris_NouvelleZone\right = Souris_NouvelleZone\left + 256
Souris_NouvelleZone\bottom = Souris_NouvelleZone\top + #GetColor_Couleur_H
ClipCursor_(Souris_NouvelleZone)
Dessine = 1
Rouge = WindowMouseX(Fenetre) - #GetColor_R_X
Vert = Green(Couleur)
Bleu = Blue(Couleur)
Alpha = Alpha(Couleur)
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
Souris_Rouge = 1
Nuance = 1
ArcEnCiel = 1
SetActiveGadget(Gadget_Valider)
EndIf
If Souris_Vert = 0 And WindowMouseX(Fenetre) >= #GetColor_G_X And WindowMouseX(Fenetre) < #GetColor_G_X + 256 And WindowMouseY(Fenetre) >= #GetColor_G_Y And WindowMouseY(Fenetre) < #GetColor_G_Y + #GetColor_Couleur_H
ShowCursor_(0)
GetClipCursor_(Souris_Zone)
Souris_NouvelleZone\left = 0
Souris_NouvelleZone\top = 0
ClientToScreen_(WindowID(Fenetre), Souris_NouvelleZone)
Souris_NouvelleZone\left + #GetColor_G_X
Souris_NouvelleZone\top + #GetColor_G_Y
Souris_NouvelleZone\right = Souris_NouvelleZone\left + 256
Souris_NouvelleZone\bottom = Souris_NouvelleZone\top + #GetColor_Couleur_H
ClipCursor_(Souris_NouvelleZone)
Dessine = 1
Rouge = Red(Couleur)
Vert = WindowMouseX(Fenetre) - #GetColor_G_X
Bleu = Blue(Couleur)
Alpha = Alpha(Couleur)
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
Souris_Vert = 1
Nuance = 1
ArcEnCiel = 1
SetActiveGadget(Gadget_Valider)
EndIf
If Souris_Bleu = 0 And WindowMouseX(Fenetre) >= #GetColor_B_X And WindowMouseX(Fenetre) < #GetColor_B_X + 256 And WindowMouseY(Fenetre) >= #GetColor_B_Y And WindowMouseY(Fenetre) < #GetColor_B_Y + #GetColor_Couleur_H
ShowCursor_(0)
GetClipCursor_(Souris_Zone)
Souris_NouvelleZone\left = 0
Souris_NouvelleZone\top = 0
ClientToScreen_(WindowID(Fenetre), Souris_NouvelleZone)
Souris_NouvelleZone\left + #GetColor_B_X
Souris_NouvelleZone\top + #GetColor_B_Y
Souris_NouvelleZone\right = Souris_NouvelleZone\left + 256
Souris_NouvelleZone\bottom = Souris_NouvelleZone\top + #GetColor_Couleur_H
ClipCursor_(Souris_NouvelleZone)
Dessine = 1
Rouge = Red(Couleur)
Vert = Green(Couleur)
Bleu = WindowMouseX(Fenetre) - #GetColor_B_X
Alpha = Alpha(Couleur)
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
Souris_Bleu = 1
Nuance = 1
ArcEnCiel = 1
SetActiveGadget(Gadget_Valider)
EndIf
If Souris_Alpha = 0 And WindowMouseX(Fenetre) >= #GetColor_A_X And WindowMouseX(Fenetre) < #GetColor_A_X + 256 And WindowMouseY(Fenetre) >= #GetColor_A_Y And WindowMouseY(Fenetre) < #GetColor_A_Y + #GetColor_Couleur_H
ShowCursor_(0)
GetClipCursor_(Souris_Zone)
Souris_NouvelleZone\left = 0
Souris_NouvelleZone\top = 0
ClientToScreen_(WindowID(Fenetre), Souris_NouvelleZone)
Souris_NouvelleZone\left + #GetColor_A_X
Souris_NouvelleZone\top + #GetColor_A_Y
Souris_NouvelleZone\right = Souris_NouvelleZone\left + 256
Souris_NouvelleZone\bottom = Souris_NouvelleZone\top + #GetColor_Couleur_H
ClipCursor_(Souris_NouvelleZone)
Dessine = 1
Rouge = Red(Couleur)
Vert = Green(Couleur)
Bleu = Blue(Couleur)
Alpha = WindowMouseX(Fenetre) - #GetColor_A_X
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
Souris_Alpha = 1
Nuance = 1
ArcEnCiel = 1
SetActiveGadget(Gadget_Valider)
EndIf
If Souris_ArcEnCiel = 0 And WindowMouseX(Fenetre) >= #GetColor_ArcEnCiel_X And WindowMouseX(Fenetre) < #GetColor_ArcEnCiel_X + #GetColor_ArcEnCiel_L And WindowMouseY(Fenetre) >= #GetColor_ArcEnCiel_Y And WindowMouseY(Fenetre) < #GetColor_ArcEnCiel_Y + #GetColor_ArcEnCiel_H
ShowCursor_(0)
GetClipCursor_(Souris_Zone)
Souris_NouvelleZone\left = 0
Souris_NouvelleZone\top = 0
ClientToScreen_(WindowID(Fenetre), Souris_NouvelleZone)
Souris_NouvelleZone\left + #GetColor_ArcEnCiel_X
Souris_NouvelleZone\top + #GetColor_ArcEnCiel_Y
Souris_NouvelleZone\right = Souris_NouvelleZone\left + #GetColor_ArcEnCiel_L
Souris_NouvelleZone\bottom = Souris_NouvelleZone\top + #GetColor_ArcEnCiel_H + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha
ClipCursor_(Souris_NouvelleZone)
ArcEnCiel_Y = WindowMouseY(Fenetre) - #GetColor_ArcEnCiel_Y
Souris_ArcEnCiel = 1
Dessine = 1
ArcEnCiel = 1
SetActiveGadget(Gadget_Valider)
EndIf
;}
Case #WM_LBUTTONUP
;{- Fin du clic de la souris
If Souris_Nuance Or Souris_Rouge Or Souris_Vert Or Souris_Bleu Or Souris_Alpha Or Souris_ArcEnCiel
ShowCursor_(1)
ClipCursor_(Souris_Zone)
Souris_Nuance = 0
Souris_Rouge = 0
Souris_Vert = 0
Souris_Bleu = 0
Souris_Alpha = 0
If Souris_ArcEnCiel
ArcEnCiel = 1
EndIf
Souris_ArcEnCiel = 0
Dessine = 1
EndIf
If WindowMouseX(Fenetre) >= #GetColor_Selection_X And WindowMouseX(Fenetre) < #GetColor_Selection_X + #GetColor_Selection_L And WindowMouseY(Fenetre) >= #GetColor_Selection_Y And WindowMouseY(Fenetre) < #GetColor_Selection_Y + #GetColor_Selection_H / 2
; Couleur actuelle
Color = Couleur
Dessine = 1
ElseIf WindowMouseX(Fenetre) >= #GetColor_Selection_X And WindowMouseX(Fenetre) < #GetColor_Selection_X + #GetColor_Selection_L And WindowMouseY(Fenetre) >= #GetColor_Selection_Y + #GetColor_Selection_H / 2 And WindowMouseY(Fenetre) < #GetColor_Selection_Y + #GetColor_Selection_H
; Couleur sauvée
Couleur = Color
Nuance = 1
ArcEnCiel = 1
Dessine = 1
EndIf
;}
Case #WM_MOUSEMOVE
;{- Déplacement de la souris
If Souris_Nuance = 1
Nuance_X = WindowMouseX(Fenetre) - #GetColor_Nuancier_X
Nuance_Y = WindowMouseY(Fenetre) - #GetColor_Nuancier_Y
Dessine = 1
EndIf
If Souris_Rouge
Rouge = WindowMouseX(Fenetre) - #GetColor_R_X
Vert = Green(Couleur)
Bleu = Blue(Couleur)
Alpha = Alpha(Couleur)
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
Dessine = 1
Nuance = 1
ArcEnCiel = 1
EndIf
If Souris_Vert
Rouge = Red(Couleur)
Vert = WindowMouseX(Fenetre) - #GetColor_G_X
Bleu = Blue(Couleur)
Alpha = Alpha(Couleur)
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
Dessine = 1
Nuance = 1
ArcEnCiel = 1
EndIf
If Souris_Bleu
Rouge = Red(Couleur)
Vert = Green(Couleur)
Bleu = WindowMouseX(Fenetre) - #GetColor_B_X
Alpha = Alpha(Couleur)
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
Dessine = 1
Nuance = 1
ArcEnCiel = 1
EndIf
If Souris_Alpha
Rouge = Red(Couleur)
Vert = Green(Couleur)
Bleu = Blue(Couleur)
Alpha = WindowMouseX(Fenetre) - #GetColor_A_X
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
Dessine = 1
Nuance = 1
ArcEnCiel = 1
EndIf
If Souris_ArcEnCiel
ArcEnCiel_Y = WindowMouseY(Fenetre) - #GetColor_ArcEnCiel_Y
Dessine = 1
ArcEnCiel = 1
EndIf
If WindowMouseX(Fenetre) >= #GetColor_Selection_X And WindowMouseX(Fenetre) < #GetColor_Selection_X + #GetColor_Selection_L And WindowMouseY(Fenetre) >= #GetColor_Selection_Y And WindowMouseY(Fenetre) < #GetColor_Selection_Y + #GetColor_Selection_H / 2
; Couleur actuelle
If Souris_Selection <> 1
Souris_Selection = 1
Dessine = 1
EndIf
ElseIf WindowMouseX(Fenetre) >= #GetColor_Selection_X And WindowMouseX(Fenetre) < #GetColor_Selection_X + #GetColor_Selection_L And WindowMouseY(Fenetre) >= #GetColor_Selection_Y + #GetColor_Selection_H / 2 And WindowMouseY(Fenetre) < #GetColor_Selection_Y + #GetColor_Selection_H
; Couleur sauvée
If Souris_Selection <> 2
Souris_Selection = 2
Dessine = 1
EndIf
ElseIf Souris_Selection <> 0
Souris_Selection = 0
Dessine = 1
EndIf
;}
Case #PB_Event_Repaint
Rafraichir = 1
Case #PB_Event_Gadget
Select EventGadget()
Case Gadget_Annuler
Quitter = 1
Color = CouleurOriginale
Case Gadget_Valider
Quitter = 1
Color = Couleur
Case Gadget_Capture
;{ Capture de couleur
HideWindow(Fenetre, 1)
Delay(50)
While WindowEvent()
Wend
; Création des fenêtres et de la copie d'écran
Capture_Ecran = ExamineDesktops()
If Capture_Ecran
x = GetDC_(0)
For Index = 0 To Capture_Ecran - 1
AddElement(Capture())
Capture()\Image = CreateImage(#PB_Any, DesktopWidth(Index), DesktopHeight(Index), 24)
If Capture()\Image
y = StartDrawing(ImageOutput(Capture()\Image))
BitBlt_(y, 0, 0, DesktopWidth(Index), DesktopHeight(Index), x, DesktopX(Index), DesktopY(Index), #SRCPAINT)
StopDrawing()
Capture()\Fenetre = OpenWindow(#PB_Any, DesktopX(Index), DesktopY(Index), DesktopWidth(Index), DesktopHeight(Index), Title, #PB_Window_BorderLess, WindowID(Fenetre))
If Capture()\Fenetre
StickyWindow(Capture()\Fenetre, 1)
ImageGadget(#PB_Any, 0, 0, 0, 0, ImageID(Capture()\Image))
EndIf
EndIf
Next
ReleaseDC_(0, x)
Capture_ZoomFenetre = OpenWindow(#PB_Any, 0, 0,(#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom + 2,(#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom + 2, Title, #PB_Window_BorderLess, WindowID(Fenetre))
If Capture_ZoomFenetre
StickyWindow(Capture_ZoomFenetre, 1)
SetWindowColor(Capture_ZoomFenetre, 0)
AddKeyboardShortcut(Capture_ZoomFenetre, #PB_Shortcut_Escape, 0)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
If EventMenu() = 0
Event = #PB_Event_CloseWindow
EndIf
Case #WM_MOUSEMOVE ; Si la souris bouge
ResetList(Capture())
For Index = 0 To Capture_Ecran - 1
NextElement(Capture())
If DesktopMouseX() >= DesktopX(Index) And DesktopMouseX() < DesktopX(Index) + DesktopWidth(Index) And DesktopMouseY() >= DesktopY(Index) And DesktopMouseY() < DesktopY(Index) + DesktopHeight(Index)
; Déplacement de la fenêtre de zoom pour suivre la souris
x = DesktopMouseX() + #GetColor_Capture_Decalage
y = DesktopMouseY() + #GetColor_Capture_Decalage
If x + (#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom + 1 > DesktopX(Index) + DesktopWidth(Index)
x - #GetColor_Capture_Decalage * 2 - (#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom - 2
EndIf
If y + (#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom + 1 > DesktopY(Index) + DesktopHeight(Index)
y - #GetColor_Capture_Decalage * 2 - (#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom - 2
EndIf
ResizeWindow(Capture_ZoomFenetre, x, y, #PB_Ignore, #PB_Ignore)
; Création du zoom
Capture_ZoomImage = CreateImage(#PB_Any, #GetColor_Capture_Taille * 2 + 1, #GetColor_Capture_Taille * 2 + 1, 24)
StartDrawing(ImageOutput(Capture_ZoomImage))
DrawImage(ImageID(Capture()\Image), #GetColor_Capture_Taille - WindowMouseX(Capture()\Fenetre), #GetColor_Capture_Taille - WindowMouseY(Capture()\Fenetre))
Capture_Couleur = Point(#GetColor_Capture_Taille, #GetColor_Capture_Taille)
StopDrawing()
ResizeImage(Capture_ZoomImage,(#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom,(#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom, #PB_Image_Raw)
StartDrawing(WindowOutput(Capture_ZoomFenetre))
DrawImage(ImageID(Capture_ZoomImage), 1, 1)
DrawingMode(#PB_2DDrawing_XOr)
Line(#GetColor_Capture_Taille * #GetColor_Capture_Zoom + #GetColor_Capture_Zoom / 2 + 1, 0, 1,(#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom)
Line(0, #GetColor_Capture_Taille * #GetColor_Capture_Zoom + #GetColor_Capture_Zoom / 2 + 1,(#GetColor_Capture_Taille * 2 + 1) * #GetColor_Capture_Zoom, 1)
StopDrawing()
FreeImage(Capture_ZoomImage)
Break
EndIf
Next
Case #PB_Event_Gadget
If EventType() = #PB_EventType_LeftClick ; Si on clique
Couleur = Capture_Couleur | Alpha(Couleur) << 24
Dessine = 1
ArcEnCiel = 1
Nuance = 1
Event = #PB_Event_CloseWindow
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
RemoveKeyboardShortcut(Capture_ZoomFenetre, #PB_Key_Escape)
CloseWindow(Capture_ZoomFenetre)
EndIf
ForEach Capture()
If IsWindow(Capture()\Fenetre)
CloseWindow(Capture()\Fenetre)
EndIf
If IsImage(Capture()\Image)
FreeImage(Capture()\Image)
EndIf
Next
ClearList(Capture())
HideWindow(Fenetre, 0)
EndIf
;}
Case Gadget_Rouge
;{ Gestion des StringGadgets
Select EventType()
Case #PB_EventType_Change
Rouge = Val(GetGadgetText(Gadget_Rouge))
If Rouge > 255
Rouge = 255
EndIf
Couleur = Couleur & $FFFFFF00 | Rouge
Dessine = 1
Nuance = 1
ArcEnCiel = 1
Case #PB_EventType_LostFocus
SetGadgetText(Gadget_Rouge, Str(Rouge))
EndSelect
Case Gadget_Vert
Select EventType()
Case #PB_EventType_Change
Vert = Val(GetGadgetText(Gadget_Vert))
If Vert > 255
Vert = 255
EndIf
Couleur = Couleur & $FFFF00FF | Vert << 8
Dessine = 1
Nuance = 1
ArcEnCiel = 1
Case #PB_EventType_LostFocus
SetGadgetText(Gadget_Vert, Str(Vert))
EndSelect
Case Gadget_Bleu
Select EventType()
Case #PB_EventType_Change
Bleu = Val(GetGadgetText(Gadget_Bleu))
If Bleu > 255
Bleu = 255
EndIf
Couleur = Couleur & $FF00FFFF | Bleu << 16
Dessine = 1
Nuance = 1
ArcEnCiel = 1
Case #PB_EventType_LostFocus
SetGadgetText(Gadget_Bleu, Str(Bleu))
EndSelect
Case Gadget_Alpha
Select EventType()
Case #PB_EventType_Change
Alpha = Val(GetGadgetText(Gadget_Alpha))
If Alpha > 255
Alpha = 255
EndIf
Couleur = Couleur & $00FFFFFF | Alpha << 24
Dessine = 1
Nuance = 1
ArcEnCiel = 1
Case #PB_EventType_LostFocus
SetGadgetText(Gadget_Alpha, Str(Alpha))
EndSelect
;}
Case Gadget_CouleurStandard
;{ Sélection d'une couleur standard
Index = GetGadgetState(Gadget_CouleurStandard)
If Index >= 0
SelectElement(CouleurStandard(), Index)
Couleur = CouleurStandard()\Couleur | Alpha(Couleur) << 24
Dessine = 1
Nuance = 1
Dessine = 1
EndIf
;}
EndSelect
EndSelect
Event = WindowEvent()
Until Event = 0 Or Quitter
;- Dessin de la fenêtre
If Nuance
;{ - Recherche de la couleur de base du nuancier
If Couleur & $00FFFFFF = $FFFFFF
Nuance_Couleur = #GetColor_CouleurDefaut
ElseIf Couleur & $00FFFFFF = $000000
Nuance_Couleur = #GetColor_CouleurDefaut
Else
Nuance_Couleur = Couleur & $00FFFFFF
EndIf
Rouge = Red(Nuance_Couleur)
Vert = Green(Nuance_Couleur)
Bleu = Blue(Nuance_Couleur)
; On recherche la couleur de base du nuancier
Nuance_X = 255
Nuance_Y = 0
If Rouge >= Vert And Rouge >= Bleu And Rouge > 0
Calcul = 255 / Rouge
Nuance_Y = 255 - Rouge
Rouge = 255
Vert = Calcul * Vert
Bleu = Calcul * Bleu
ElseIf Vert >= Rouge And Vert >= Bleu And Vert > 0
Calcul = 255 / Vert
Nuance_Y = 255 - Vert
Rouge = Calcul * Rouge
Vert = 255
Bleu = Calcul * Bleu
ElseIf Bleu >= Vert And Bleu >= Rouge And Bleu > 0
Calcul = 255 / Bleu
Nuance_Y = 255 - Bleu
Rouge = Calcul * Rouge
Vert = Calcul * Vert
Bleu = 255
EndIf
If Rouge <= Vert And Rouge <= Bleu
Calcul = Rouge / 255
Nuance_X = 255 - Rouge
Vert = (Vert - Rouge) / (1 - Calcul)
Bleu = (Bleu - Rouge) / (1 - Calcul)
Rouge = 0
ElseIf Vert <= Rouge And Vert <= Bleu
Calcul = Vert / 255
Nuance_X = 255 - Vert
Rouge = (Rouge - Vert) / (1 - Calcul)
Bleu = (Bleu - Vert) / (1 - Calcul)
Vert = 0
ElseIf Bleu <= Rouge And Bleu <= Vert
Calcul = Bleu / 255
Nuance_X = 255 - Bleu
Rouge = (Rouge - Bleu) / (1 - Calcul)
Vert = (Vert - Bleu) / (1 - Calcul)
Bleu = 0
EndIf
Nuance_Couleur = RGB(Rouge, Vert, Bleu)
If Couleur & $00FFFFFF = $FFFFFF
Nuance_X = 0
Nuance_Y = 0
ElseIf Couleur & $00FFFFFF = $000000
Nuance_X = 255
Nuance_Y = 255
EndIf
Nuance = 0
;}
EndIf
If ArcEnCiel
;{ Dessin de l'arc en ciel
StartDrawing(ImageOutput(Image_ArcEnCiel))
DrawingMode(#PB_2DDrawing_AlphaBlend)
If Souris_ArcEnCiel
; Si on déplace le sélecteur dans l'arc en ciel, on relève simplement la couleur sous le curseur
Nuance_Couleur = Point(0, ArcEnCiel_Y) & $00FFFFFF
Else
; Sinon, on redessine l'arc en ciel pour placer le curseur au centre
For x = 255 * 3 To 3060 - 255 * 3 ; Recherche de la couleur de départ de l'arc en ciel
If ArcEnCiel_Couleur(x) = Nuance_Couleur
ArcEnCiel_Origine = x - 255 * 3 + 1
Break
EndIf
Next
For y = 0 To #GetColor_ArcEnCiel_H - 1 + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha ; Dessin de l'arc en ciel
; une petite équation de dégré 3 pour avoir un effet de zoom autour de la couleur de base dans l'arc en ciel
Calcul = 2 * y / (#GetColor_ArcEnCiel_H - 1 + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha) - 1
Calcul = (Calcul * Calcul * Calcul + y / (#GetColor_ArcEnCiel_H - 1 + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha) * 0.5 + 1) * 255 * 6 / 2.5
x = ArcEnCiel_Origine + Calcul
Line(0, y, #GetColor_ArcEnCiel_L, 1, $FF000000 | ArcEnCiel_Couleur(x))
Next
ArcEnCiel_Y = (#GetColor_ArcEnCiel_H + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha) / 2 - 1 ; Position du curseur au centre
EndIf
StopDrawing()
ArcEnCiel = 0
;}
EndIf
If Dessine
StartDrawing(ImageOutput(Image_Dessin))
DrawingMode(#PB_2DDrawing_AlphaBlend)
; Dessin du fond
Box(#GetColor_Nuancier_X - #GetColor_Espace, #GetColor_Nuancier_Y - #GetColor_Espace, 256 + 2 * #GetColor_Espace, 256 + 2 * #GetColor_Espace, Fond)
Box(#GetColor_ArcEnCiel_X - #GetColor_Espace, #GetColor_ArcEnCiel_Y - #GetColor_Espace, #GetColor_ArcEnCiel_L + 2 * #GetColor_Espace, #GetColor_ArcEnCiel_H + 2 * #GetColor_Espace + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha, Fond)
Box(#GetColor_Selection_X - #GetColor_Espace, #GetColor_Selection_Y - #GetColor_Espace, #GetColor_Selection_L + 2 * #GetColor_Espace, #GetColor_Selection_H + #GetColor_Espace + 1, Fond)
Box(#GetColor_R_X - #GetColor_Espace, #GetColor_R_Y - #GetColor_Espace, 256 + 2 * #GetColor_Espace, #GetColor_Couleur_H + 2 * #GetColor_Espace, Fond)
Box(#GetColor_G_X - #GetColor_Espace, #GetColor_G_Y - #GetColor_Espace, 256 + 2 * #GetColor_Espace, #GetColor_Couleur_H + 2 * #GetColor_Espace, Fond)
Box(#GetColor_B_X - #GetColor_Espace, #GetColor_B_Y - #GetColor_Espace, 256 + 2 * #GetColor_Espace, #GetColor_Couleur_H + 2 * #GetColor_Espace, Fond)
If DisplayAlpha
Box(#GetColor_A_X - #GetColor_Espace, #GetColor_A_Y - #GetColor_Espace, 256 + 2 * #GetColor_Espace, #GetColor_Couleur_H + 2 * #GetColor_Espace, Fond)
EndIf
; Dessin de l'arc en ciel
DrawAlphaImage(ImageID(Image_ArcEnCiel), #GetColor_ArcEnCiel_X, #GetColor_ArcEnCiel_Y)
; Dessin du nuancier
Box(#GetColor_Nuancier_X, #GetColor_Nuancier_Y, 256, 256, $FF000000 | Nuance_Couleur)
DrawAlphaImage(ImageID(Image_Degrade), #GetColor_Nuancier_X, #GetColor_Nuancier_Y)
If Souris_Nuance Or Souris_ArcEnCiel
Couleur = (Point(#GetColor_Nuancier_X + Nuance_X, #GetColor_Nuancier_Y + Nuance_Y) & $00FFFFFF) | (Alpha(Couleur) << 24)
EndIf
; Dessin de la sélection et de la couleur d'origine
If DisplayAlpha
DrawAlphaImage(ImageID(Image_SelectionAlpha), #GetColor_Selection_X, #GetColor_Selection_Y)
Box(#GetColor_Selection_X, #GetColor_Selection_Y, #GetColor_Selection_L, #GetColor_Selection_H / 2, Couleur)
Box(#GetColor_Selection_X, #GetColor_Selection_Y + #GetColor_Selection_H / 2, #GetColor_Selection_L, #GetColor_Selection_H / 2, Color)
Else
Box(#GetColor_Selection_X, #GetColor_Selection_Y, #GetColor_Selection_L, #GetColor_Selection_H / 2, $FF000000 | Couleur)
Box(#GetColor_Selection_X, #GetColor_Selection_Y + #GetColor_Selection_H / 2, #GetColor_Selection_L, #GetColor_Selection_H / 2, $FF000000 | Color)
EndIf
Select Souris_Selection
Case 1
DrawImage(ImageID(Icone_Bas), #GetColor_Selection_X + (#GetColor_Selection_L - 24) / 2, #GetColor_Selection_Y + (#GetColor_Selection_H - 24) / 2)
Case 2
DrawImage(ImageID(Icone_Haut), #GetColor_Selection_X + (#GetColor_Selection_L - 24) / 2, #GetColor_Selection_Y + (#GetColor_Selection_H - 24) / 2)
EndSelect
; Dessin de la composante rouge
DrawAlphaImage(ImageID(Image_Rouge), #GetColor_R_X, #GetColor_R_Y)
; Dessin de la composante verte
DrawAlphaImage(ImageID(Image_Vert), #GetColor_G_X, #GetColor_G_Y)
; Dessin de la composante bleue
DrawAlphaImage(ImageID(Image_Bleu), #GetColor_B_X, #GetColor_B_Y)
; Dessin de la composante bleue
If DisplayAlpha
DrawAlphaImage(ImageID(Image_Alpha), #GetColor_A_X, #GetColor_A_Y)
EndIf
; Dessin des contours
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Outlined)
Box(#GetColor_Nuancier_X - 1, #GetColor_Nuancier_Y - 1, 256 + 2, 256 + 2, #GetColor_Contour)
Box(#GetColor_ArcEnCiel_X - 1, #GetColor_ArcEnCiel_Y - 1, #GetColor_ArcEnCiel_L + 2, #GetColor_ArcEnCiel_H + 2 + (#GetColor_Couleur_H + #GetColor_Espace) * DisplayAlpha, #GetColor_Contour)
Box(#GetColor_Selection_X - 1, #GetColor_Selection_Y - 1, #GetColor_Selection_L + 2, #GetColor_Selection_H + 2, #GetColor_Contour)
Box(#GetColor_R_X - 1, #GetColor_R_Y - 1, 256 + 2, #GetColor_Couleur_H + 2, #GetColor_Contour)
Box(#GetColor_G_X - 1, #GetColor_G_Y - 1, 256 + 2, #GetColor_Couleur_H + 2, #GetColor_Contour)
Box(#GetColor_B_X - 1, #GetColor_B_Y - 1, 256 + 2, #GetColor_Couleur_H + 2, #GetColor_Contour)
If DisplayAlpha
Box(#GetColor_A_X - 1, #GetColor_A_Y - 1, 256 + 2, #GetColor_Couleur_H + 2, #GetColor_Contour)
EndIf
; Dessin des sélections
DrawImage(ImageID(Image_Curseur_ArcEnCiel), #GetColor_ArcEnCiel_X - 3, #GetColor_ArcEnCiel_Y + ArcEnCiel_Y - 1)
DrawImage(ImageID(Icone_Selection), #GetColor_Nuancier_X + Nuance_X - 7, #GetColor_Nuancier_Y + Nuance_Y - 7)
Rouge = Red(Couleur)
DrawImage(ImageID(Image_Curseur_Couleur), #GetColor_R_X + Rouge - 1, #GetColor_R_Y - 3)
Vert = Green(Couleur)
DrawImage(ImageID(Image_Curseur_Couleur), #GetColor_G_X + Vert - 1, #GetColor_G_Y - 3)
Bleu = Blue(Couleur)
DrawImage(ImageID(Image_Curseur_Couleur), #GetColor_B_X + Bleu - 1, #GetColor_B_Y - 3)
Alpha = Alpha(Couleur)
If DisplayAlpha
DrawImage(ImageID(Image_Curseur_Couleur), #GetColor_A_X + Alpha - 1, #GetColor_A_Y - 3)
EndIf
StopDrawing()
; Valeurs des StringGadgets
If GetActiveGadget() <> Gadget_Rouge And Str(Rouge) <> GetGadgetText(Gadget_Rouge)
SetGadgetText(Gadget_Rouge, Str(Rouge))
EndIf
If GetActiveGadget() <> Gadget_Vert And Str(Vert) <> GetGadgetText(Gadget_Vert)
SetGadgetText(Gadget_Vert, Str(Vert))
EndIf
If GetActiveGadget() <> Gadget_Bleu And Str(Bleu) <> GetGadgetText(Gadget_Bleu)
SetGadgetText(Gadget_Bleu, Str(Bleu))
EndIf
If DisplayAlpha And GetActiveGadget() <> Gadget_Alpha And Str(Alpha) <> GetGadgetText(Gadget_Alpha)
SetGadgetText(Gadget_Alpha, Str(Alpha))
EndIf
; Valeur de la liste des couleurs standards
Index = -1
x = RGB(Rouge, Vert, Bleu)
ForEach CouleurStandard()
If CouleurStandard()\Couleur = x
Index = ListIndex(CouleurStandard())
EndIf
Next
If GetGadgetState(Gadget_CouleurStandard) <> Index
SetGadgetState(Gadget_CouleurStandard, Index)
EndIf
;{ Calcul du TSL
If rouge >= Vert And rouge >= Bleu
x = rouge
If Vert >= Bleu
y = Bleu
Else
y = Vert
EndIf
ElseIf Vert >= rouge And Vert >= Bleu
x = Vert
If rouge >= Bleu
y = Bleu
Else
y = rouge
EndIf
Calcul = (Bleu - rouge) / (x - y) + 2
Else
x = Bleu
If rouge >= Vert
y = Vert
Else
y = rouge
EndIf
EndIf
If Rouge = Vert And Rouge = Bleu
Teinte = 160
Saturation = 0
Else
If Rouge >= Vert And Rouge >= Bleu
Calcul = (Vert - Bleu) / (x - y)
ElseIf Vert >= Rouge And Vert >= Bleu
Calcul = (Bleu - Rouge) / (x - y) + 2
Else
Calcul = (Rouge - Vert) / (x - y) + 4
EndIf
Teinte = Int(Round(240 / 6 * Calcul, #PB_Round_Nearest)) % 240
If Teinte < 0
Teinte = 240 + Teinte
EndIf
If x + y < 255
Saturation = Round(240 * (x - y) / (x + y), #PB_Round_Nearest)
Else
Saturation = Round(240 * (x - y) / (2 * 255 - x - y), #PB_Round_Nearest)
EndIf
EndIf
If Rouge = 0 And Vert = 0 And Bleu = 0
Luminosite = 0
ElseIf Rouge = 255 And Vert = 255 And Bleu = 255
Luminosite = 240
Else
Luminosite = Round(240 * (x + y) / (2 * 255), #PB_Round_Nearest)
EndIf
;}
; Infos
ForEach Info()
If Info()\Variable
Texte = Info()\Texte
Texte = ReplaceString(Texte, "?r", Str(Rouge), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?g", Str(Vert), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?b", Str(Bleu), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?a", Str(Alpha), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?hr", RSet(Hex(Rouge), 2, "0"), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?hg", RSet(Hex(Vert), 2, "0"), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?hb", RSet(Hex(Bleu), 2, "0"), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?ha", RSet(Hex(Alpha), 2, "0"), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?t", Str(Teinte), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?s", Str(Saturation), #PB_String_NoCase)
Texte = ReplaceString(Texte, "?l", Str(Luminosite), #PB_String_NoCase)
SetGadgetText(Info()\Gadget, Texte)
EndIf
Next
Dessine = 0
Rafraichir = 1
EndIf
If Rafraichir
StartDrawing(WindowOutput(Fenetre)) ; on dessine l'image sur la fenêtre
DrawAlphaImage(ImageID(Image_Dessin), 0, 0)
StopDrawing()
Rafraichir = 0
EndIf
Event = WaitWindowEvent()
Until Quitter
CloseWindow(Fenetre)
EndIf
If IsWindow(ParentWindow)
DisableWindow(ParentWindow, 0)
EndIf
FreeImage(Image_Degrade)
FreeImage(Image_Rouge)
FreeImage(Image_Vert)
FreeImage(Image_Bleu)
If DisplayAlpha
FreeImage(Image_Alpha)
FreeImage(Image_SelectionAlpha)
EndIf
FreeImage(Image_ArcEnCiel)
FreeImage(Image_Dessin)
FreeImage(Image_Curseur_ArcEnCiel)
FreeImage(Image_Curseur_Couleur)
FreeImage(Icone_Valider)
FreeImage(Icone_Annuler)
FreeImage(Icone_Capture)
FreeImage(Icone_Selection)
FreeImage(Icone_Haut)
FreeImage(Icone_Bas)
ProcedureReturn Color
DisableExplicit
EndProcedure
CompilerIf #PB_Compiler_Debugger
Couleur = GetColor2($F0FF4587, "Titre" + Chr(10) + "Sélection de couleur" + Chr(10) + "Héxadécimal" + Chr(9) + "$?ha?hb?hg?hr" + Chr(10) + "RGBA" + Chr(9) + "RGBA(?r, ?g, ?b, ?a)" + Chr(10) + "TSL" + Chr(9) + "?t, ?s, ?l", 0, 0)
; Debug "RGBA(" + Str(Red(Couleur)) + ", " + Str(Green(Couleur)) + ", " + Str(Blue(Couleur)) + ", " + Str(Alpha(Couleur)) + ")"
CompilerEndIf