De rgb à r, g et b, la meilleur technique en vb !

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 321 fois - Téléchargée 31 fois

Contenu du snippet

Voici, bien humblement, la façon la plus rapide de décomposer une couleur 24-bits en ses composantes colorimétriques (8-bits) sous VB6. Elle allie en réalité les deux façons les plus courantes d'appréhender le problème.
J'ai juste modifié le calcul de la composante colorimétrique bleue qui, habituellement, nous est présenté sous cette forme :
B= (C& And &HFF0000) \ &H10000
et l'ai simplifié sous celle-ci :
B = C& \ &H10000

Pour la compréhension, référez-vous aux trop nombreuses sources déjà présentes à ce sujet sur Codes-Sources et VBFrance.

Tout ce que je peux vous rappeler c'est que :

- "\" est un division ne renvoyant que la sa partie entière (autrement dit, tronquant la partie décimale, le reste de la division... l'inverse du modulo quoi !)

- &Hxxx& sont des nombres sous forme hexadécimale (base 16) dont voici ceux utilisé présentement :
Hexa Dec Bin R G B --
FF = 255 = 0000'0000 | 0000'0000 | 1111'1111.--
100 = 256 = 0000'0000 | 0000'0001 | 0000'0000.--
FF00 = 65'280 = 0000'0000 | 1111'1111 | 0000'0000.--
10000 = 65'536 = 0000'0001 | 0000'0000 | 0000'0000.--
FF0000 = 16'711'680 = 1111'1111 | 0000'0000 | 0000'0000.--

- Que la fonction logique AND (ET en français) est :
0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1

Source / Exemple :


'A vous de mettre ça sous forme de fonction ou de procédure !
 
 Dim C As Long  'Couleur codée en 24 bits [mot de 3 octets] (de 0 à 16'777'215)

 Dim R As Byte  'Composante Rouge (  Red en anglais) codée sur 1 octet (de 0 à 255)
 Dim G As Byte  'Composante Vert  (Green en anglais) codée sur 1 octet (de 0 à 255)
 Dim B As Byte  'Composante Bleu  ( Blue en anglais) codée sur 1 octet (de 0 à 255)
  
 R = C& And &HFF&
 G = (C& And &HFF00&) \ &H100&
 B = C& \ &H10000  'au lieu de B= (C& And &HFF0000) \ &H10000

Conclusion :


Si vous trouvez plus "rapide" (à part faire en sorte de ne pas avoir à décomposer la couleur), je suis preneur !

A voir également

Ajouter un commentaire Commentaires
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Résumons...

Pour éxprimer une couleur, on utilise un nombre (Long)
par exemple, du rouge vif, sera du 16711680
et du vert, du 65280

en fait, chacune des trois couleurs (rouge vert bleu) sont mélangées, afin d'obtenir ce nombre. Nous souhaitons ici simplement retrouver la quantité de rouge, de vert et de bleu utilisée pour une couleur donnée...

est-ce plus clair ?
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Comprends-tu au moins le but du problème ?
Messages postés
14
Date d'inscription
dimanche 27 août 2006
Statut
Membre
Dernière intervention
3 août 2010

Je comprends rien ...
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Arf, aussi facile à dire qu'a faire !!! Grrr ce qu'il peut m'énerver ce EB avec tout c'qu'il sait ;-)
Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
On peux faire du tres bon code avec VB, il suffit de comprendre la machine et d'utiliser les bon type et les bon operations. Oublier les fonctions de script, les variants, les fonction de conversion et cocher toutes les options d'optimisation. Rien que ça permet de ce rapprocher d'un code similaire en C/C++. Apres on ce heurte a l'initialisation de la stack frame, aux quelques appels inevitable a la machine virtuelle et autre gestion du code d'erreur.

Mais on peut outrepasser tout cela avec une petite injection de code assembleur bien placer et tout roule.

@+
Afficher les 21 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.