Sélecteur de couleur type PhotoShop

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Sélecteur de couleur type PhotoShop

Message par Le Soldat Inconnu »

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 : 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
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)]
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Sélecteur de couleur type PhotoShop

Message par venom »

8) il en jette ton sélecteur de couleur.
Bravo Soldat






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Sélecteur de couleur type PhotoShop

Message par GallyHC »

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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Sélecteur de couleur type PhotoShop

Message par Le Soldat Inconnu »

@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)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Sélecteur de couleur type PhotoShop

Message par nico »

Tout simplement superbe, bravô ! :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Sélecteur de couleur type PhotoShop

Message par Backup »

...
Dernière modification par Backup le mar. 19/août/2014 10:34, modifié 4 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Sélecteur de couleur type PhotoShop

Message par Kwai chang caine »

Vraiment beau 8O
Comme ton site, tout dans la sobriété et la classe
Merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Sélecteur de couleur type PhotoShop

Message par Le Soldat Inconnu »

@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)]
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Sélecteur de couleur type PhotoShop

Message par GallyHC »

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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Sélecteur de couleur type PhotoShop

Message par dayvid »

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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Sélecteur de couleur type PhotoShop

Message par Le Soldat Inconnu »

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)]
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Sélecteur de couleur type PhotoShop

Message par GallyHC »

Bonjour Le Soldat Inconnu,

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

Code : Tout sélectionner

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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Sélecteur de couleur type PhotoShop

Message par Le Soldat Inconnu »

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)]
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sélecteur de couleur type PhotoShop

Message par Ar-S »

Il devient parfait le p'tit :)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Sélecteur de couleur type PhotoShop

Message par G-Rom »

Il devient parfait le p'tit
Même pas portable :roll:

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