Dégradé d'une couleur a une autre (amélioré)

Soyez le premier à donner votre avis sur cette source.

Vue 7 919 fois - Téléchargée 760 fois

Description

Voici unu fonction pour faire un dégradé d'une couleur a une autre

Copier cette fonction dans votre programme et mettre :

- objet : picturebox, form, ...
- DebCol et FinCol : couleur de départ et d'arrivé
- Vertical : True pour tracer le dégradé verticalement (False horizontalement)

C tou simple !

Cette nouvelle version est parfaite
elle ne modifi aucune propriétés et les degradé sont correct avec n'import kel couleurs

Source / Exemple :


Public Function Degrade(Objet As Object, DebCol As Long, FinCol As Long, Vertical As Integer) As Byte
On Error Resume Next
Dim a As Integer       'Déclaration des variables
Dim r As Double
Dim V As Double     'Obligé en double ici, sinon avec certaines couleur le dégradé ce fai pas comme il faut
Dim b As Double
Dim r2 As Double
Dim v2 As Double
Dim b2 As Double
Dim decR As Double
Dim decV As Double
Dim decB As Double
Dim Scal As Byte
Dim Vcalc As Long

b = DebCol \ 65536  'Décomposition des couleur en rouge
V = (DebCol - b * 65536) \ 256  'Vert et bleu
r = DebCol - b * 65536 - V * 256 'calcul trouvé sur www.vbcode.com
b2 = FinCol \ 65536
v2 = (FinCol - b2 * 65536) \ 256
r2 = FinCol - b2 * 65536 - v2 * 256

Scal = Objet.ScaleMode  'Enregistre le scale de l'objet
Objet.ScaleMode = 3 'Modifi le scale de l'objet en pixel

If Vertical = False Then Vcalc = Objet.ScaleWidth Else Vcalc = Objet.ScaleHeight

decR = (r2 - r) / Vcalc   'Calcul du décalage des couleurs
decV = (v2 - V) / Vcalc
decB = (b2 - b) / Vcalc

'Tracage du dégradé
If Vertical = False Then    'Horizontal
    For a = 0 To Objet.ScaleWidth
        Objet.Line (a, 0)-(a + 1, Objet.ScaleHeight), RGB(r, V, b), BF
        r = Abs(r + decR): V = Abs(V + decV): b = Abs(b + decB)  'Incrémentation des couleurs
    Next a
Else                        'Vertical
    For a = 0 To Objet.ScaleHeight
        Objet.Line (0, a)-(Objet.ScaleWidth, a + 1), RGB(r, V, b), BF
        r = Abs(r + decR): V = Abs(V + decV): b = Abs(b + decB)  'Incrémentation des couleurs
    Next a
End If
'J'utilise la valeur absolu ci-dessus car sur certines couleur ca passe en dessous de zéro :-( sais pas pk

Objet.ScaleMode = Scal  'Remet comme il faut le scale de l'objet
If Err Then Degrade = 1 Else Degrade = 0 'La fonction renvoi 1 en cas d'erreur
End Function

Conclusion :


y'a un exemple dans le zip
voila
@+
fabs

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
395
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
19 juin 2009
1
Super , rapide, efficace, et utile !
Messages postés
88
Date d'inscription
vendredi 26 avril 2002
Statut
Membre
Dernière intervention
24 février 2006

Utile...
Messages postés
77
Date d'inscription
samedi 9 novembre 2002
Statut
Membre
Dernière intervention
6 juillet 2014

C'est un bon code bien propre et solide. Comme je n'ai pas une machine très rapide et qu'on voit le rideau de couleur se baisser, j'ai choisi un incrément de 10 dans les boucles pour accélérer l'affichage (la différence de dégradé à l'écran est imperceptible).
Donc 2 petites modifs insignifiantes :
decR = (r2 - r) / Vcalc * 10
(pour chacune des couleurs bien sûr) et
For a = 0 To Objet.ScaleWidth Step 10
Objet.Line (a, 0)-(a + 10, Objet.ScaleHeight), RGB(r, V, b), BF
(idem bien sûr dans le scaleheight)
Bon, je mets 10. Si quelqu'un trouve une API qui fait ça, je suis preneur. Je pense que ça existe dans le SDK (mais comment dit-on dégradé en anglais ?)

c'est dans le logiciel talkative, en source sur ce site (reseau et internet)

pour choisir les couleurs du fader.
bah je c pas, g utilisé ca dans mon programme du concour : horlogodotron, je me suis di ke je pourrai le mettre en source, ca serait pratique. J'avais regardé avant sur vbfrance pour faire un dégradé kom ca et j'avais pas trouvé alors g du me faire ma propre fonction. Je certifie ke c moi ki est écrit ces lignes. de plus,tu pourras voir dans les sources de mon progs horlogodotron ke je met les site sur lequel je prend les sources ki sont pas de moi. ;-)
par contre , je veu bien ke tu m'indique sur kel page c ce ke tu a fais toi ! :-)
merci
@+
fabs
Afficher les 8 commentaires

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.