Salut
Toujours mon projet de cercle chromatique... et d'harmonies de couleurs...
Cette fois-ci, c'est un problème d'affichage de couleur complémentaire entre le noir et le blanc!
J'ai deux Sliders qui modifient la saturation pour l'un et la luminosité pour l'autre (modèle TSL: Teinte, Saturation et Luminosité). Celui de la luminosité part du blanc vers le noir en passant au milieu par la couleur modifiée ou non par la valeur de saturation. Le hic, c'est que quand le slider Luminosité est sur le blanc ou le noir, celles-ci ne s'affichent pas correctement dans la grille d'affichage. Volir l'image.
J'ai un tableau de type personalisé pour garder sous la main les valeurs calculées
Quand je clique sur le cercle chromatique ou que je déplace les sliders, les couleurs sont calculées et stockées dans le tableau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Type THarmonie ptX As Single ptY As Single Couleur As Long Luminosite As Long Saturation As Long End Type Dim Harmonie(0 To 3) As THarmonie
Je vous fais grâce du reste de la procédure car pour l'instant je n'ai calculé que pour la complémentaire simple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Private Sub CalculerHarmonie(ByVal C As Long, ByVal X As Single, ByVal Y As Single) ' couleur sélectionnée Harmonie(0).Couleur = C Harmonie(0).ptX = X Harmonie(0).ptY = Y Harmonie(0).Saturation = lblCouleurSat(slrSatur.Value).BackColor Harmonie(0).Luminosite = lblCouleurLum(slrLumin.Value).BackColor Select Case HarmonieType Case 0 ' complémentaire naturelle With Harmonie(1) .Couleur = &HFFFFFF - C .ptX = picCercle.Width - X .ptY = picCercle.Height - Y .Saturation = &HFFFFFF - Harmonie(0).Saturation .Luminosite = &HFFFFFF - Harmonie(0).Luminosite End With With Harmonie(2) .Couleur = &HFFFFFF .ptX = 0 .ptY = 0 .Saturation = &HFFFFFF .Luminosite = &HFFFFFF End With With Harmonie(3) .Couleur = &HFFFFFF .ptX = 0 .ptY = 0 .Saturation = &HFFFFFF .Luminosite = &HFFFFFF End With Case 1 ' complémentaires doubles (en triangle) Harmonie(1).Couleur = &HFFFFFF ' initialisée à vide (blanc) Harmonie(1).ptX = 0 ...
Et finalement, la procédure que je crois fautive... Mais j'ai beau regarder... j'en perds mon latin (heu... je connaissais le latin, moi?...)
mfgHarmonie est un FlexGrid... comme mentionné dans le titre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Private Sub RemplirGrille() Dim i As Integer ' Couleur mfgHarmonie.Row = 1 For i = 0 To UBound(Harmonie) With mfgHarmonie .Col = i + 1 .TextMatrix(2, .Col) = Hex(Harmonie(i).Couleur) .TextMatrix(4, .Col) = Hex(Harmonie(i).Saturation) .TextMatrix(6, .Col) = Hex(Harmonie(i).Luminosite) .Row = 1 .CellBackColor = Harmonie(i).Couleur .Row = 3 .CellBackColor = Harmonie(i).Saturation .Row = 5 .CellBackColor = Harmonie(i).Luminosite End With Next End Sub
Images :
Partager