begin process at 2012 02 16 14:43:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > CONVERSIONS COULEUR / RVB / HSI (OPTIMISÉ)

CONVERSIONS COULEUR / RVB / HSI (OPTIMISÉ)


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :Couleur, HSI, Teinte, Saturation, Luminosité Niveau :Initié Date de création :08/12/2007 Date de mise à jour :08/12/2007 16:40:04 Vu / téléchargé :8 887 / 327

Auteur : Columbiad

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Conversions Variable_Couleur / Rouge_Vert_Bleu / Hue_Saturation_Intensité dans tous les sens (Module + exemple)


##############################
     Un peu de théorie...
##############################

Une couleur peut être codée principalement de 3 façons différentes :
   COULEUR, RVB, et HSI

1°) La COULEUR elle-même sur 24 bits, soit 16 millions de couleurs (exatement 16777216)
     - 8 bits rouge
     - 8 bits vert
     - 8 bits bleu


2°) Ses 3 composantes RVB (Rouge, Vert, Bleu) ou RGB en anglais (Red, Green, Blue)
     - R - Rouge  de 0 à 255, soit 256 niveaux de rouge
     - V - Vert   de 0 à 255, soit 256 niveaux de vert
     - B - Bleu   de 0 à 255, soit 256 niveaux de bleu
     Combinaisons des 3 = 256*256*256 = 16 milions de couleurs (le compte est bon)

Couleur = (((bleu x 256) + vert) x 256) + rouge
         = rouge + (256 x vert) + (65536 x bleu)


3°) Sa correspondance HSI (Hue*, Saturation, Intensity) en anglais
     Abréviation française souvent utilisée : TSL (Teinte, Saturation, Luminosité)
(* prononcer "YOU")
     - H : Hue        = Teinte
     - S : Saturation = Saturation
     - I : Intensity  = Luminosité

     La Teinte (HUE) correspond à la couleur dominante :
       Valeurs de 0 à 239 :
         -   0 = rouge
         -  20 = orange (rouge + un peu de vert)
         -  40 = jaune (rouge + vert)
         -  80 = vert
         - 120 = bleu ciel (vert + bleu)
         - 160 = bleu
         - 200 = violet (bleu + rouge)
         - 239 = presque rouge

       Exemple : Teinte ROUGE (valeur 0) et ses variations de Saturation et de Luminosité :
         - rouge             (rouge)
         - rouge foncé       (marron)
         - rouge très foncé  (noir)
         - rouge clair       (rose)
         - rouge très clair  (blanc)
         - rouge pâle        (gris)

     La Saturation (SATURATION) correspond contraste de couleur :
       Valeur de 0 à 240 :
       - 0   : Vous avez encore une télé en noir et blanc ?!
       - 240 : Attention les yeux !

     La Luminosité (INTENSITY) est la notion de sombre ou clair :
       Valeur de 0 à 240 :
       - 0   : Qui a éteint la lumière ?!
       - 220 : Vive les lunettes de soleil !
       - 240 : Blanc.
       - 120 : Là, c'est beaucoup mieux.

#####################
     En pratique
#####################

"Couleur.bas" est un module comportant toutes les fonctions de conversions de couleurs dont vous aurez besoin.

"Couleur_RVB_HSI.vbp" est une petite application pédagogique utilisant mon module Couleur.bas.
Résolution minimum : 800 x 600

Le but : comprendre le principe de conversion RVB <-> HSI

Source

  • Call Fichier_Zip("Rien de tel qu'une bonne démo !")
  • '################################################################
  • '
  • ' UTILISATION DES 4 FONCTIONS SUIVANTES (by Columbiad)
  • '
  • ' - Couleur_2_RVB()
  • ' - Couleur_2_HSI()
  • ' - RVB_2_HSI()
  • ' - HSI_2_RVB()
  • '
  • '################################################################
  • '
  • 'Voici toutes les conversions possibles en une seule ligne :
  • '-----------------------------------------------------------
  • '
  • 'A PARTIR D'UNE COULEUR :
  • '------------------------
  • 'Convertir une COULEUR en R,V,B :
  • ' Call Couleur_2_RVB(COULEUR, R, V, B)
  • ' ou
  • ' Couleur_2_RVB COULEUR, R, V, B
  • '
  • 'Convertir une COULEUR en H,S,I :
  • ' Call Couleur_2_HSI(COULEUR, H, S, I)
  • ' ou
  • ' Couleur_2_HSI COULEUR, H, S, I
  • '
  • 'Convertir une COULEUR en H,S,I et en R,V,B :
  • ' Call Couleur_2_HSI(COULEUR, H, S, I, R, V, B)
  • ' ou
  • ' Couleur_2_HSI COULEUR, H, S, I, R, V, B
  • '
  • '
  • 'A PARTIR DES COMPOSANTES RVB :
  • '------------------------------
  • 'Convertir R, V, B en COULEUR :
  • ' COULEUR = RGB(R, V, B)
  • '
  • 'Convertir R,V,B en H,S,I :
  • ' Call RVB_2_HSI(R, V, B, H, S, I)
  • ' ou
  • ' RVB_2_HSI R, V, B, H, S, I
  • '
  • 'Convertir R,V,B en H,S,I et en COULEUR :
  • ' COULEUR = RVB_2_HSI(R, V, B, H, S, I)
  • '
  • '
  • 'A PARTIR DE LA CORRESPONDANTE HSI :
  • '-----------------------------------
  • 'Convertir HSI en COULEUR :
  • ' COULEUR = HSI_2_RVB(H, S, I)
  • '
  • 'Convertir HSI en RVB :
  • ' Call HSI_2_RVB(H, S, I, R, V, B)
  • ' ou
  • ' HSI_2_RVB H, S, I, R, V, B
  • '
  • 'Convertir HSI en RVB et en COULEUR :
  • ' COULEUR = HSI_2_RVB(H, S, I, R, V, B)
  • '
  • End
Call Fichier_Zip("Rien de tel qu'une bonne démo !")

'################################################################
'
'     UTILISATION DES 4 FONCTIONS SUIVANTES (by Columbiad)
'
'     - Couleur_2_RVB()
'     - Couleur_2_HSI()                                      
'     - RVB_2_HSI()
'     - HSI_2_RVB()
'
'################################################################
'
'Voici toutes les conversions possibles en une seule ligne :
'-----------------------------------------------------------
'
'A PARTIR D'UNE COULEUR :
'------------------------
'Convertir une COULEUR en R,V,B :
'    Call Couleur_2_RVB(COULEUR, R, V, B)
'      ou
'    Couleur_2_RVB COULEUR, R, V, B
'
'Convertir une COULEUR en H,S,I :
'    Call Couleur_2_HSI(COULEUR, H, S, I)
'      ou
'    Couleur_2_HSI COULEUR, H, S, I
'
'Convertir une COULEUR en H,S,I et en R,V,B :
'    Call Couleur_2_HSI(COULEUR, H, S, I, R, V, B)
'      ou
'    Couleur_2_HSI COULEUR, H, S, I, R, V, B
'
'
'A PARTIR DES COMPOSANTES RVB :
'------------------------------
'Convertir R, V, B en COULEUR :
'    COULEUR = RGB(R, V, B)
'
'Convertir R,V,B en H,S,I :
'    Call RVB_2_HSI(R, V, B, H, S, I)
'      ou
'    RVB_2_HSI R, V, B, H, S, I
'
'Convertir R,V,B en H,S,I et en COULEUR :
'    COULEUR = RVB_2_HSI(R, V, B, H, S, I)
'
'
'A PARTIR DE LA CORRESPONDANTE HSI :
'-----------------------------------
'Convertir HSI en COULEUR :
'    COULEUR = HSI_2_RVB(H, S, I)
'
'Convertir HSI en RVB :
'    Call HSI_2_RVB(H, S, I, R, V, B)
'      ou
'    HSI_2_RVB H, S, I, R, V, B
'
'Convertir HSI en RVB et en COULEUR :
'    COULEUR = HSI_2_RVB(H, S, I, R, V, B)
'
End

 Conclusion

PS : Vous trouverez parfois la SATURATION ou l'INTENSITE en pourcentages
     (valeurs de 0 à 100)
  -> Il vous suffira de les multiplier par 2,4 avant de les utiliser.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

08 décembre 2007 11:54:31 :
petite mise en page
08 décembre 2007 11:56:58 :
petite mise en page
08 décembre 2007 12:09:34 :
petite mise en page
08 décembre 2007 12:16:26 :
petite mise en page
08 décembre 2007 12:21:53 :
petite mise en page
08 décembre 2007 12:52:20 :
Ajout capture d'écran
08 décembre 2007 16:14:04 :
Petite modif de description : merci WINDOB (^-^)
08 décembre 2007 16:16:38 :
Petite modif de description : merci WINDOB (^_^)
08 décembre 2007 16:40:04 :
petite mise en page

 Sources du même auteur

JOYSTICK ET AUTRES MANETTES DE JEU (OPTIMISÉ)

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) VB10 - CRÉER VOS PROPRES CALQUES SUR UNE IMAGE par Duke49
Source avec Zip Source avec une capture Source .NET (Dotnet) CREER UN GIF ANIMÉ par Le Pivert
Source avec une capture GRAPH PHP COURBE DE CHARGE par s.defaye
Source avec Zip Source avec une capture BOULE DE CRISTAL par BLUEBIBUBBLE
VB6 - DÉPLACEMENT D'UN CONTRÔLE SUR UN SEGMENT DE DROITE DÉL... par ucfoutu

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) LOGICIEL DE MÉMO (POST-IT) par VBmasterX
Source .NET (Dotnet) AMUSONS NOUS AVEC UN LABEL ^^ par Adn56
Source avec Zip Source avec une capture COLOR PICKER par EBArtSoft
Source avec Zip Source .NET (Dotnet) LIRE ET CHANGER LA LUMINOSITÉ DES ÉCRANS LCD (DE PORTABLE) C... par ShareVB
Source avec Zip Source avec une capture COULCOD 4.2 _COULEURS - VALEURS -NUANCES par Sechaud

Commentaires et avis

Commentaire de windob le 08/12/2007 14:13:17

Pour chipoter :
Hue = Teinte en français
L'abréviation la plus souvent utilisée en français est TSL pour Teinte Saturation Luminosité.

Commentaire de clock le 09/12/2007 17:05:13

Super travail , voici 2 ans que je cherche à convertir une couleur d'un pixel en une donnée numérique équivalente ...... Merci !
Je te donne 10/10 ....
Biensur , sur ce site il y à quantité de progs parlant de se sujet
cependant plus claire , plus accomplis que ça , non !!..

Commentaire de Renfield le 09/12/2007 22:01:37 administrateur CS

optimisé, je ne sais pas, reste que tu semble bien maitriser ton sujet

Commentaire de Columbiad le 10/12/2007 18:29:04

Merci CLOCK ! Je me suis efforcé de rendre mes explication aussi claires que possible. Je suis heureux d'avoir pu te rendre ce service.
---
Renfield : Si tu me trouves des fonctions de conversion plus réduites que dans le module Couleur.bas, je suis preneur (^_^). (L'optimisation ne porte que sur ce module, l'appli de démo n'est là que pour comprendre les conversions RVB/HSI, un peu bourrin je l'avoue, mais ça fonctionne...)
---
Salutations à toutes et tous (^_^)

Commentaire de Renfield le 10/12/2007 19:11:07 administrateur CS

j'avais pas mal bossé avec ce genre de conversion...

concernant l'optimisation, voici de betes exemples...

MIN(MIN(R, V), B)
induit deux appels de fonction, donc deux passages de parametres, etc...
fais une fonction Min3... par exemple

les divisions sont plus couteuses en nombre de cycles que les multiplications...
/2 se dit * 0.5

Couleur_2_RVB est à recoder en calculs, sans passage par la case String
(voir http://www.vbfrance.com/codes/RGB-VICE-VERSA-TRES-RAPIDE_40189.aspx)

tu pourrais sans doute utilise des Byte, mais quitte a ne pas le faire, utilises des Long plutot que des Integer, les processeurs 32 bits prefereront...


  If I < 240 / 2 Then
    ColorL = (I / 240) * (1 - (S / 240))
    ColorH = (I / 240) * (1 + (S / 240))
  Else
    ColorL = (I / 240) - (1 - (I / 240)) * (S / 240)
    ColorH = (I / 240) + (1 - (I / 240)) * (S / 240)
  End If
dans ce genre de cas, il peut etre fructueux de mettre en cache les calculs intermédiaires (tes divisions)


j'ai pas tout suivit de la logique appliquée, a toi de voir s'il n'est pas possible d'utiliser des ElseIf... (cas qui s'exclueraient les uns les autres)
  If V = Color1 And R = Color3 Then Plage = 6: Color2 = B: sens = -1
  If V = Color1 And B = Color3 Then Plage = 4: Color2 = R: sens = 1
  If R = Color1 And B = Color3 Then Plage = 4: Color2 = V: sens = -1
  If R = Color1 And V = Color3 Then Plage = 2: Color2 = B: sens = 1
  If B = Color1 And V = Color3 Then Plage = 2: Color2 = R: sens = -1
  If B = Color1 And R = Color3 Then Plage = 0: Color2 = V: sens = 1




 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[?] Couleur RGB et luminosité [ par Ghislain ] Bonjour à tous,Je cherche à récupérer à partir d'une couleur (rgb ou long) la valeur des trois composantes de luminosité, teinte et contraste.Une idée conversion couleurs RGB <-> teinte luminosité... [ par jannoman ] Salut !J'aimerais savoir comment est cod&#233; une couleur avec teinte luminosit&#233;... en RGB ou de 1 &#224; 16 millionsMerci.A+.Thomas. Définir la couleur d'un texte en fonction du fond [ par daddycool76 ] Bonjour à tous,Une petite question :Etant donné que dans mon application la couleur de fond est choisie par l'utilisateur (donc variable) ,existe-t-il Retrouver une couleur : teinte avec nombre décimal [ par exeriale ] Bonjour,J'ai un soft qui pour des couleur données web HEXA les stock sous forme de nombre à décimalexemple : #000066 donneés stockée : blue : 0.4117 Rechercher les cellules contenant une meme valeur dans dans une feuille et les colorier de la meme couleur [ par nasilo ] Bonjour,A l'aide de VBA, j'essaie de colorier de la même couleur des cellules qui ont une même valeur dans une base de données excel 2003. Voici le co [Excel] Macro permettant de compter des cellules d'une certaine couleur [ par Feyloki ] Bonjour,Je suis actuellement sur la réalisation d'un tableau excel.Chaque ligne de cellules a trois état différents:-Les cellules entièrement vide, qu Verouiller certaines cellules en fond de couleur [ par fgassmann ] Bonjour à tous,Voici mon problème:Je dipose d'un classeur dans lequel j'ai plusieurs onglets.J'aimerais verouiller toutes les cellules qui ne sont pas Changer la couleur d'un scrollBar [ par jytest ] Bonsoir à tous.Me voilà encore avec un souci pas très gros...mais avoir la solution m'aiderait cependant...J'ai recherché dans tout le forum etje n'ai Couleur RVB sur 6 ou 8 digits ??? [ par jytest ] Bonjour,j'ai une couleur RVB(Rouge = 250, Vert = 231, Bleu = 136),c'est un jaune pâle,que je veux convertir en hexa...Par tous les convertisseur (sur


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales