PureBasic

Forums PureBasic
Nous sommes le Lun 20/Mai/2013 4:04

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 18 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Sélecteur de couleur type PhotoShop
MessagePosté: Lun 20/Fév/2012 21:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
Coucou,

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 :)

Image

Image
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.

Image
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:
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

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Lun 20/Fév/2012 21:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2116
Localisation: . <------ ici
8) il en jette ton sélecteur de couleur.
Bravo Soldat






@++

_________________
Windows 8 x64, processeur core i7 2.93ghz, mémoire ram 10Go, 2x ati radeon hd 5750 1Go chacune
PureBasic 5.11 x86 & x64 DirectX 11


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Lun 20/Fév/2012 22:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 912
Localisation: Nord (France)
Bonjour,

Comme de part hazard apres le mieu lol :), non je rigole il est bien simpa aussi faudrait faire un seul topic avec tout ces codes, ça pourait etre simpa non?

Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Lun 20/Fév/2012 23:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
@GallyHC : Le premier jet de mon sélecteur date de 2008 :mrgreen: Alors pour le plagia, tu repasseras. C'est juste que tu m'as donné envie de me replonger dedans.

Sinon, j'ai fais un Plugin pour jaPBe avec mon sélecteur de couleur, la classe, non ? :mrgreen:
C'est dans le lien du premier sujet.

Des testeurs, siouplais

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Lun 20/Fév/2012 23:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3065
Tout simplement superbe, bravô ! :D


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mar 21/Fév/2012 0:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12946
Le Soldat Inconnu a écrit:
- Un programme configurable comme outil dans l'éditeur de PureBasic ou dans jaPBe



pour en faire un outils pour EPB
il suffit de compiller ton prg en Exe le mettre dans le dossier Outils de EPB

et pour que ton prg communique avec EPB voici ce qu'on peut faire
Code:

; ************ OBLIGATOIRE *****************************************
;- structure memoire partagé
Structure Partage
   declencheur.b
    valeur1.i
   message.s {500}
EndStructure
Global *ram.Partage

MemoirePartagee=CreatefileMapping_($FFFFFFFF,#Null, #PAGE_READWRITE, 0, SizeOf(Partage),"EPB_RAM")
*ram=MapViewOfFile_(MemoirePartagee, #FILE_MAP_WRITE, 0, 0, 0)
Declare envoie_epb(text.s,type)

Procedure envoie_epb(text.s,type)
   *ram\declencheur.b=1
   *ram\valeur1.i=type
   *ram\message.s=text.s      
EndProcedure
; *****************************************************************************




; cette procedure vous permettra d'envoyer des commandes a EPB
; utile si vous dévellopez un utilitaire, qui aurai besoin de poser un résultat dans EPB


; ****************** exemple d'utilisation **************************************
;
;envoie_epb("un Petit Message",0)  ; pose au curseur
; ; *******************************************************************
;envoie_epb("Remplace",1)  ; Remplace la ligne en cours (par rapport au curseur)
; ; *******************************************************************
;envoie_epb("un Petit Message",2) ; insert une ligne (par rapport au curseur)
; ; *******************************************************************
;Debug GetCurrentDirectory()
;envoie_epb("20",3) ; saute a la ligne 20
; ; *******************************************************************
;envoie_epb("10",4) ; positionne le curseur apres le 10eme caratere
; ; *******************************************************************
;envoie_epb("5,10",5) ; selectione  apres le 5em caractere sur une longueur de 10 caractere de la ligne en cours
;  *******************************************************************

; exemple de selection et remplacement :
;envoie_epb("5,10",5) ; selectione  apres le 5em caractere sur une longueur de 10 caractere de la ligne en cours

;envoie_epb("message qui remplace",6) ; et remplace par le message

; ; *******************************************************************

; recuperation de la ligne en cours par le clipboard()
;envoie_epb("message bidon",7) ; Recupere la ligne en cours, retour par le clipboard

; Delay(200)
;Debug GetClipboardText()

; ; *******************************************************************

;file$=OpenFileRequester("load pb",Home$,"*.pb",0)
;envoie_epb(file$ ,8) ; creer un onglet, et charger un fichier *.pb

; ; *******************************************************************
; EPb


donc en clair avec ce code , toi tu fourni la chaine RGB($xx,$xx,$xx) avec ton selecteur a EPB
de la façon suivante

Citation:
envoie_epb("RGB($xx,$xx,$xx)",0) ; pose au curseur


si EPB est actif , il ecrira "RGB($xx,$xx,$xx)" a l'emplacement du curseur ;)
c'est le paramètre en rouge qui determine l'action qu'on veux obtenir de EPB

voir les autres possibilité dans le code :)

Merci de penser a mon petit éditeur .. :lol:

_________________
Image


Dernière édition par Dobro le Sam 10/Mar/2012 17:48, édité 3 fois.

Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mar 21/Fév/2012 11:33 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4439
Localisation: Isere
Vraiment beau 8O
Comme ton site, tout dans la sobriété et la classe
Merci 8)

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mar 21/Fév/2012 12:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
@Dobro : Le code source est dans l'archive, à toi de jouer :) (comment ça je suis fainéant ?)

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mar 21/Fév/2012 20:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 912
Localisation: Nord (France)
Bonjour Le Soldat Inconnu,

Je ne parle pas de plagia et en plus il ne sont pas pareil lolll je parle juste que tu te decide de le sortir apres le mieu c'est tout. Sinon il est bien sympa je verrais lekel j'utiliserais dans mon programme qui sait peu etre le tien :).

Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mer 22/Fév/2012 15:26 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Superbe LSI :)

Je voudrait stp te demander si il serais possible que tu ajoute
les valeurs correspondantes a:

Luminosité
Saturation
Teinte

Cella me serais très utile, merci d’avance :)

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mer 22/Fév/2012 16:50 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
J'avais commencé à regarder mais après un passage sur Wikipedia, j'avais vu qu'il y avait plusieurs méthode pour calculé le bordel et j'ai abandonné. Je vais rezieuté :D

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mer 22/Fév/2012 19:38 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 912
Localisation: Nord (France)
Bonjour Le Soldat Inconnu,

Tu peux toujours reprendre la partie de calcul que dayvid desire dans mon code pas de prob :)

Code:
Procedure RGBToHLS(lCR.l, lCG.l, lCB.l, *lCH.l, *lCL.l, *lCS.l)
; ROUTINE DE CONSERTION DU RGB EN HLS.
  Define fCH.f
  Define fCS.f
  Define fCL.f
  Define lMin.l
  Define lMax.l
  Define lDif.l
  Define lSum.l
  Define lNmR.l
  Define lNmG.l
  Define lNmB.l

  If lCR < lCG
    If lCR < lCB
      lMin = lCR
    Else
      lMin = lCB
    EndIf
  Else
    If lCG < lCB
      lMin = lCG
    Else
      lMin = lCB
    EndIf
  EndIf
  If lCR > lCG
    If lCR > lCG
      lMax = lCR
    Else
      lMax = lCB
    EndIf
  Else
    If lCG > lCB
      lMax = lCG
    Else
      lMax = lCB
    EndIf
  EndIf
  lDif = lMax - lMin
  lSum = lMax + lMin
  fCL = lSum / 510
  If lMax = lMin
    fCH = 0
    fCS = 0
  Else
    lNmR = (lMax - lCR) / lDif
    lNmG = (lMax - lCG) / lDif
    lNmB = (lMax - lCB) / lDif
    If fCL <= 0.5
      fCS = lDif / lSum
    Else
      fCS = lDif / (510 - lSum)
    EndIf
    If lCR = lMax
      fCH = 60 * (6 + lNmB - lNmG)
    EndIf
    If lCG = lMax
      fCH = 60 * (2 + lNmR - lNmB)
    EndIf
    If lCB = lMax
      fCH = 60 * (4 + lNmG - lNmR)
    EndIf
  EndIf
  If fCH = 360
   fCH = 0
  EndIf
  fCH = (fCH / 360 * #COLOR_SPECTRUM_SIZE_MAX)
  fCL = fCL * #COLOR_SPECTRUM_SIZE_MAX
  fCS = fCS * #COLOR_SPECTRUM_SIZE_MAX
  PokeL(*lCH, Int(fCH))
  PokeL(*lCL, Int(fCL))
  PokeL(*lCS, Int(fCS))
EndProcedure


Cordialement,
GallyHC


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mer 22/Fév/2012 20:54 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
Merci :)
J'ai copié Wikipedia.

Mise à jour de la librairie :
- Correction d'un bug
- Amélioration au niveau de la frappe des composantes RGB
- Ajout de la possibilité d'afficher les composantes TSL dans les informations (voir le dernier aperçu dans le premier sujet)

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mer 22/Fév/2012 22:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 5213
Il devient parfait le p'tit :)

_________________
.: Ar-S :. - Windows 8 x64 - Radeon HD 7870 - PB 5.11
LDV MULTIMEDIA : Assistance informatique Isère (38) Oyeu
PURE BASIC forum non officiel : Forum PB


Haut
 Profil  
 
 Sujet du message: Re: Sélecteur de couleur type PhotoShop
MessagePosté: Mer 22/Fév/2012 23:32 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 2132
Citation:
Il devient parfait le p'tit


Même pas portable :roll:

@LSI:
Tu peu pas te passer des apis avec les fonctions PB ?


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 18 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye