Color chooser - un petit usercontrol pour choisir une couleur rvb

Soyez le premier à donner votre avis sur cette source.

Vue 3 610 fois - Téléchargée 372 fois

Description

C'est tout bete et pas super rapide, mais ça peut etre utile :
allez voir l'apercu qui parle de lui-meme (enfin j'espère)
en gros :
on a un dégradé en 2 dimensions des couleurs rouge et verte, en fonction d'une couleur bleue qu'on choisit à droite, dans un sélecteur dégradé du bleu au noir...
on peut aussi choisir les couleurs individuellement numériquement ou visuellement

Source / Exemple :


Sub Colorer()
'voilà deux méthodes très lentes :
'    For i = 0 To 255
'        For j = 0 To 255
'            'très lent :
'            SetPixel chCoul.hdc, i, j, RVB(i, j, Bleu)
'            'hyper lent : (cad encore plus lent que tres lent)
'            'chCoul.PSet (i, j), RVB(i, j, Bleu)
'        Next j
'    Next i

'et la méthode rapide :
'un peu plus compliquée...

    Dim gRect      As GRADIENT_RECT
    Dim triVert(1) As TRIVERTEX 'deux trivertex
    
    Dim noLigne As Long
    
    For noLigne = 0 To chCoul.Height
        
        'rouge=noLigne
        'Vert = dégradé dans la ligne
        'bleu = 3eme dimension
        
        'trivert 2 : couleur et prosition
        With triVert(0)
            .X = 0
            .Y = noLigne
            .Alpha = 0&
            .Red = LongToUShort(noLigne * 256#)
            .Green = LongToUShort(0)
            .Blue = LongToUShort(Bleu * 256#)
        End With
        
        'trivert 1 : couleur et position
        With triVert(1)
            .X = chCoul.Width
            .Y = noLigne + 1
            .Alpha = 0&
            .Red = LongToUShort(noLigne * 256#)
            .Green = LongToUShort(255# * 256#)
            .Blue = LongToUShort(Bleu * 256#)
        End With
    
        'définit l'index de triVert correspondant :
        gRect.UpperLeft = 0 'au coin supérieur gauche
        gRect.LowerRight = 1 'au coin inférieur droit
        
        GradientFillRect chCoul.hdc, triVert(0), 2, gRect, 1, 0
    
    Next noLigne
    
    curCoul.ZOrder 0
    curCoul.Visible = True
    curCoul.Move curCoul.Left
End Sub

Conclusion :


Bon, alors pour ceux qui ont vu le prog à sa première version, il y a beaucoup de changements... et le problème de la vitesse est réglé (merci Renfield)

bonne prog !

Helkanen

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
dans ma source, si je me rapelle bien, j'avais mis une shape pour le cercle... celle-ci contenue dans une picturebox

et normallement, en modifiant la propriete ClipControls de la pictureBox, ca resoud quelques choses....

enfin, je n'ai pas VB sous la main, je ne fait que tenter de me souvenir....
Helkanen
Messages postés
54
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
9 juin 2004
-
je sais pour les fleches, ça je peux le régler... mais le cercle qui scintille, j'arrive pas à l'en empecher...
en java je ferais un petit double-buffering, mais en vb, je sais pas quoi faire... ?

merci de ton commentaire en tout cas...

Helkanen
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
Pas mal les modifs...

juste deux trois petites chose (je sais, je suis chiant !!)

jai voulu deplacer les tites fleches jaunes avec la souris, pas moyen !! il faut cliquer sur la barre coloree au dessus....

de deux, le cercle clignotte pas mal (rafraichissement) quant on le deplace dans le carre de couleurs....

voila, j'ai pas regardé le code, mais deja des tites evolutions en perspective....

bonne evolution, en tous cas !
Helkanen
Messages postés
54
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
9 juin 2004
-
bientot une bonne (enfin j'espère) amélioration
ce soir surement...

Helkanen
cs_olid
Messages postés
296
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
28 janvier 2008
-
Heu...la fonction "classique" RVB va faire perdre des ressources inutilement : refait ton prog pour renvoyer le code couleur dans le meme type que celui utilisé par SetPixel (et autres API)

;o)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.