Extraction des composantes rvg (rgb pour les anglophones) d'une valeur long

0/5 (30 avis)

Snippet vu 4 131 fois - Téléchargée 30 fois

Contenu du snippet

Après avoir cherché sur plusieurs sites une fonction qui permette d'extraire ces composantes, sans succès, j'ai du prendre le pas sur ma feinéantise et me la faire moi ^_^
Et puisqu'on y est, autant en faire profiter tout le monde !

Source / Exemple :


Public Function ExtractRGB(ByVal RGBColor As Long, ByRef OutRed As Integer, OutGreen As Integer, OutBlue As Integer) As String

  Dim tmpVal As String
  
  ' Pour avoir la couleur en Hexa
  ' et d'etre sur qu'elle soit au format BBVVRR
  ' Et oui, en Hexa, ca apparait à l'envers ...
  tmpVal = Right$("000000" & Hex(RGBColor), 6)
  
  
  ' Recupération des différentes composantes
  ' Conversion en numerique de la composante
  ' la l'ajout du "&H" au début et du "&" à la fin
  ' servent à faire comprendre à la fonction Val que
  ' c'est de l'hexa - Merci JPP
  OutRed = Val("&H" & Right$(tmpVal, 2) & "&")
  OutGreen = Val("&H" & Mid$(tmpVal, 3, 2) & "&")
  OutBlue = Val("&H" & Left$(tmpVal, 2) & "&")
  
  ' Sortie en chaine de caractere, séparateur ","
  ExtractRGB = OutRed & "," & OutGreen & "," & OutBlue
  
End Function

Conclusion :


Grand merci à JPP pour son aide ^_^ sans toi j'aurai bien galéré avec ce Val

A voir également

Ajouter un commentaire Commentaires
lumesh Messages postés 564 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 7 novembre 2008
4 déc. 2003 à 18:51
bah si dans le domaine tu as envie daller plus loin voici une idee sympa:

Un separateur de couche RVB pour le traitement ou limpression papier ou film (flasheuse , etc) .
Engros pouvoir separer les couche RVB dunc image (donc ca c pas dur recup le % de R, V , B de chaque pixel et en deduire 3 images , 1 pr chaque composante).

Un separateur de couche CMJN pour la meme chose:
En gros convertir chaque pixel de composante RVB en pourcentage CMJN (deja plus compliqué) et en separé le Cyan, Magenta, Jaune et Noir du resultat (tjrs pr chaque pixel). donc creer 4 images resultantes du pourcentage de la composante CMJN.

Ne pas oublier non plus de pouvoir faire l'operation inverse cad de remettre chaque separation de couche en RVB ou CMJN .

(ex: appliquer un filtre sur une seule composante specifique, imprimé ou flasher qune seule composante, tramer une image, etc etc )

Pour convertir de RVB en CMJN voivi quelque infos utiles:

100% Rouge = 0% cyan + 100% magenta + 100% jaune + 0% noir
100% Vert = 100% cyan + 0% magenta + 100% jaune + 0% noir
100% Bleu = 100% cyan + 100% magenta + 0% jaune + 0% noir

la couleur Noir du CMJN permet de modifier la teinte dune resultante.

un rouge R127 V0 B0 correspond a C0 M100 J100 N50
un rouge R190 V0 B0 correspond a C0 M100 J100 N25

en gros:
- 75% de rouge pure RVB correspond a 25% de noir (teinte) + 100% de rouge pure CMJN
ou
- 62% de rouge pure RVB correspond a 38% de noir (teinte) + 100% de rouge pure CMJN

apres ces explication facile den deduire donc le pourcentage de chaque composante CMJN pour chaque composante RVB de chaque pixel !
et avec tt ca il ne reste plus ka faire le code (vb.net a la rigueur, C# ou C++ minimum je pense ;) VB6 a oublier a mon avis :))

enfin bon c une idee de src ki me trotte ds la tete mais po le temps pour le faire donc si ta envie de tamuser nhesitepo ;))
ToshiBaba Messages postés 25 Date d'inscription mercredi 28 mai 2003 Statut Membre Dernière intervention 24 septembre 2004
4 déc. 2003 à 20:59
Bah je l'ai fait pcq j'en ai eu un besoin ^_^ et que les codes qui faisaient ca n'etaient pas terribles ni tres précis. Si un jour j'ai besoin de le faire, pourquoi pas ;)
Sinon c'est en VB6 parce que je bosse avec et .net ben c'est pas d'actualité...
bubble44 Messages postés 200 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 3 août 2004
4 déc. 2003 à 21:29
Public Function RGBfromLONG(LongCol As Long)

Dim Blue As Double, Green As Double, Red As Double

Blue = Fix((LongCol / 256) / 256)
Green = Fix((LongCol - ((Blue * 256) * 256)) / 256)
Red = Fix(LongCol - ((Blue * 256) * 256) - (Green * 256))

End Function
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
5 déc. 2003 à 00:15
Bubble44 a bien raison ! l'arithmétique est a choisir ici ! car le passage par des chaines de caractères, et le decoupage de ceux -ci coutent cher en temps processeur.....
ronanry Messages postés 190 Date d'inscription lundi 25 novembre 2002 Statut Membre Dernière intervention 22 décembre 2009
5 déc. 2003 à 13:32
juste une precision......le titre devrait etre : blablabl RVB et pas RVG ;)

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.