CONVERSIONS COULEUR / RVB / HSI (OPTIMISÉ)

cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008 - 8 déc. 2007 à 14:13
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 10 déc. 2007 à 19:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44966-conversions-couleur-rvb-hsi-optimise

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 déc. 2007 à 19:11
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
Columbiad Messages postés 1 Date d'inscription lundi 20 janvier 2003 Statut Membre Dernière intervention 10 décembre 2007
10 déc. 2007 à 18:29
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 (^_^)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 déc. 2007 à 22:01
optimisé, je ne sais pas, reste que tu semble bien maitriser ton sujet
clock Messages postés 6 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 9 décembre 2007
9 déc. 2007 à 17:05
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 !!..
cs_windob Messages postés 225 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 25 août 2008
8 déc. 2007 à 14:13
Pour chipoter :
Hue = Teinte en français
L'abréviation la plus souvent utilisée en français est TSL pour Teinte Saturation Luminosité.
Rejoignez-nous