Voici donc ici le code non opérationnel pour crée une palette de couleurs.
Le but est d'avoir toutes les teinte et saturation possible en ayant le plus de couleurs différente possible sans couleurs identique, le problème est que c'est peut être pas possible

Mais ont fais au mieux !
C'est un placard, désoler

Pour vous évité de lancer le programme car il est un peut long, 10 mn environ je dirais
je poste ici l'image du résultat:

Puis le placard de code:
Code : Tout sélectionner
Enumeration 1
#ImageDepart
#ImageCreation
EndEnumeration
; Minimum entre 2 Valeurs
Procedure.f Min(Val_1.f, Val_2.f, Val_3.f)
If Val_1 <= Val_2
Minimum2.f = Val_1
Else
Minimum2.f = Val_2
EndIf
If Val_3 <= Minimum2.f
Minimum2.f = Val_3
EndIf
ProcedureReturn Minimum2
EndProcedure
; Maximum entre 2 Valeurs
Procedure.f Max(Val_1.f, Val_2.f, Val_3.f)
If Val_1 <= Val_2
Maximum2.f = Val_2
Else
Maximum2.f = Val_1
EndIf
If Val_3 >= Maximum2.f
Maximum2.f = Val_3
EndIf
ProcedureReturn Maximum2
EndProcedure
; Convertie la couleur en Teinte, Saturation et luminosité
Procedure.s RgbToTSL(Couleur.i, NombreDeDecimale.i = 0)
If NombreDeDecimale.i < 0
NombreDeDecimale.i = 0
ElseIf NombreDeDecimale.i > 10
NombreDeDecimale.i = 10
EndIf
; By Dobro d'apres:
; http://www.la-photo-en-faits.com/2013/05/RVB-CMJN-TSL-conversion-definition.html et http://www.irem.univ-montp2.fr/optionsciences/20052006/nuanciers.pdf
R = Red(Couleur.i)
V = Green(Couleur.i)
B = Blue(Couleur.i)
Maxi = Max(R,V,B)
Mini = Min(R,V,B)
C = (Maxi - mini)
If Maxi = R
T.f = 60 * (V - B) / C
EndIf
If Maxi = V
T.f = 60 * (2 + (B - R) / C)
EndIf
If Maxi=B
T.f = 60 * (4 + (B - R) / C)
EndIf
S.f = 100 * C / Maxi
L.f = 100 * Maxi / 255
If T.f <= 0
T.f = 0
EndIf
If L.f <= 0
L.f = 0
EndIf
If S.f <= 0
S.f=0
EndIf
; Debug "T.f = " + T.f
; Debug "S.f = " + S.f
; Debug "L.f = " + L.f
; Debug ""
Sortie.s = StrF(T, NombreDeDecimale.i) + "," + StrF(S, NombreDeDecimale.i) + "," + StrF(L, NombreDeDecimale.i) + "," + Str(R) + "," + Str(V) + "," + Str(B)
ProcedureReturn Sortie.s
EndProcedure
; Constrater la couleur, échelle négative pour diminuer et positive pour augmenter.
ProcedureDLL.i Contraste(Couleur.i, Echelle.f)
Protected Rouge.i, Vert.i, Bleu.i, Alpha.i
Rouge = Couleur & $FF
Vert = Couleur >> 8 & $FF
Bleu = Couleur >> 16 & $FF
Alpha = Couleur >> 24
Rouge * Echelle + 127 * (1 - Echelle)
Vert * Echelle + 127 * (1 - Echelle)
Bleu * Echelle + 127 * (1 - Echelle)
If Rouge > 255 : Rouge = 255
ElseIf Rouge < 0 : Rouge = 0 : EndIf
If Vert > 255 : Vert = 255
ElseIf Vert < 0 : Vert = 0 : EndIf
If Bleu > 255 : Bleu = 255
ElseIf Bleu < 0 : Bleu = 0 : EndIf
ProcedureReturn (Rouge | Vert <<8 | Bleu << 16 | Alpha << 24)
EndProcedure
; Création de l'image de la teinte:
;-------------------------------------------------------------------------------------------------------------------------------------------------------
; Le Rouge est à fond soit 255.
Rouge = 255
; Le Vert est au minimum soit 0.
Vert = 0
; Le Bleu est au minimum soit 0.
Bleu = 0
X = 0 ; Position en horizontal sur l'image.
CreateImage(#ImageDepart, 1530, 1, 24, 0) ; Création de l'image.
StartDrawing(ImageOutput(#ImageDepart))
; Tu augmente le Vert de 1 en 1 jusqu'à arriver à 255.
For Vert = 0 To 255
Couleur = RGB(Rouge, Vert, Bleu) ; Calcule de la couleur en RGB.
Plot(X, 0, Couleur) ; Ont déssine le point de la couleur sur l'image.
X + 1 ; Ont avvance d'une position.
Next
; Ont remet le Vert à 255 car il est égale à 256 en sortie de boucle.
Vert = 255
; Tu diminue le Rouge jusqu'à arriver à 0.
; Ont commance à 254 ou sinon il y aura des doublon.
For Rouge = 254 To 0 Step -1
Couleur = RGB(Rouge, Vert, Bleu) ; Calcule de la couleur en RGB.
Plot(X, 0, Couleur) ; Ont déssine le point de la couleur sur l'image.
X + 1 ; Ont avvance d'une position.
Next
; Ont remet le Rouge à 0 car il est égale à -1 en sortie de boucle.
Rouge = 0
; Tu augmente le Bleu de 1 en 1 jusqu'à arriver à 255.
; Ont commance à 1 ou sinon il y aura des doublon.
For Bleu = 1 To 255
Couleur = RGB(Rouge, Vert, Bleu) ; Calcule de la couleur en RGB.
Plot(X, 0, Couleur) ; Ont déssine le point de la couleur sur l'image.
X + 1 ; Ont avvance d'une position.
Next
; Ont remet le Bleu à 255 car il est égale à 256 en sortie de boucle.
Bleu = 255
; Tu diminue le Vert jusqu'à arriver à 0.
; Ont commance à 254 ou sinon il y aura des doublon.
For Vert = 254 To 0 Step -1
Couleur = RGB(Rouge, Vert, Bleu) ; Calcule de la couleur en RGB.
Plot(X, 0, Couleur) ; Ont déssine le point de la couleur sur l'image.
X + 1 ; Ont avvance d'une position.
Next
; Ont remet le Vert à 0 car il est égale à -1 en sortie de boucle.
Vert = 0
; Tu augmente le Rouge de 1 en 1 jusqu'à arriver à 255.
; Ont commance à 1 ou sinon il y aura des doublon.
For Rouge = 1 To 255
Couleur = RGB(Rouge, Vert, Bleu) ; Calcule de la couleur en RGB.
Plot(X, 0, Couleur) ; Ont déssine le point de la couleur sur l'image.
X + 1 ; Ont avvance d'une position.
Next
; Ont remet le Rouge à 255 car il est égale à 256 en sortie de boucle.
Rouge = 255
; Tu diminue le Bleu jusqu'à arriver à 0.
; Ont commance à 254 et termine à 1 ou sinon il y aura des doublon.
For Bleu = 254 To 1 Step -1
Couleur = RGB(Rouge, Vert, Bleu) ; Calcule de la couleur en RGB.
Plot(X, 0, Couleur) ; Ont déssine le point de la couleur sur l'image.
X + 1 ; Ont avvance d'une position.
Next
; Ont remet le Vert à 0 car il est égale à -1 en sortie de boucle.
Bleu = 0
StopDrawing()
; Fin.
; Fin de création de l'image de la teinte:
;-------------------------------------------------------------------------------------------------------------------------------------------------------
Dim MonTableauDeCouleur.i(1529, 499)
NewList MaListeDeCouleur.i()
X = 0
Y = 0
LargeurImage = ImageWidth(#ImageDepart)
HauteurImage = ImageHeight(#ImageDepart)
StartDrawing(ImageOutput(#ImageDepart))
; Lecture de l'image et mise des couleurs dans un tableau
Repeat
If (X = LargeurImage And Y < HauteurImage)
X = 0
Y + 1
EndIf
Couleur = Point(X, Y)
MonTableauDeCouleur.i(X, 0) = Couleur
If ((X + 1) = LargeurImage And (Y + 1) = HauteurImage)
Break
EndIf
X + 1
ForEver
StopDrawing()
; Je vais lire chaque pixel de l'image (Les couleurs sont dans le tableau) et je vais appliquer successivement les saturations en partant du haut vers le bas
; Ainsi la première ligne de l'image aurra le maximum en saturation, la secondes le maximum - 1, etc jusqua 0 (256 en tout)
For TableauX = 0 To 1529
Echelle.f = 1
ClearList(MaListeDeCouleur.i())
DerniereCouleur.i = -1
Couleur = MonTableauDeCouleur(TableauX, 0)
; C'est ici que je vais crée toutes les autre saturation de la couleurs dans le tableau
Repeat
; Ici je part de la saturation qui est maximum dans l'image et je la diminus
; très progréssivement afin d'avoir toutes les saturation de la couleur possible
Echelle.f - 0.00001
Trouver = 0
; Recherche de la couleur pour voir si elle n'est aps déjà présente dans la liste
If DerniereCouleur.i <> Contraste(Couleur, Echelle.f)
ForEach MaListeDeCouleur.i()
If Contraste(Couleur, Echelle.f) = MaListeDeCouleur.i()
Trouver = 1
Break
EndIf
Next
Else
Trouver = 1
EndIf
If Trouver = 0
AddElement(MaListeDeCouleur.i())
MaListeDeCouleur.i() = Contraste(Couleur, Echelle.f)
; Enregistrelent de la dernière couleur mise dans la liste
DerniereCouleur.i = Contraste(Couleur, Echelle.f)
EndIf
; Quand l'échel est à 0, sa veux dire que la saturation est à 0, donc on arrete
If Echelle <= 0
Break
EndIf
ForEver
TableauY = 0
Debug TableauX
; Ici je met les couleurs dans la tableau, je complette toutes les teinte de la couleur dans la tableau en descandant de 1 en 1 jusqua la saturation maximum
ForEach MaListeDeCouleur.i()
MonTableauDeCouleur.i(TableauX, TableauY) = MaListeDeCouleur.i()
TableauY + 1
Next
Next
; Je crée une image
If CreateImage(#ImageCreation, 1530, 500, 24, 0)
StartDrawing(ImageOutput(#ImageCreation))
; Je parcour mon tableau pour prendre els couleurs dans l'ordre et ainsi créer l'image
For Y = 0 To 499
For X = 0 To 1529
Plot(X, Y, MonTableauDeCouleur(X, Y))
Next
Next
StopDrawing()
SetClipboardImage(#ImageCreation)
EndIf