Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Colorimétrie : convertisseur RVB vers TSL | |
| | Auteur | Message |
---|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Colorimétrie : convertisseur RVB vers TSL Dim 8 Mai 2022 - 2:31 | |
| Bonjour à tous ! T.S.L. ( H.S.L. en anglais) est un système de gestion des couleurs. Il permet de coder une couleur en fonction de sa Teinte, de sa Saturation et de sa Luminosité. Dans certaines publications, les deux derniers paramètres sont permutés ce qui donne T.L.S. ( H.L.S. en anglais). Ne pas confondre avec le système T.S.V. (H.S.V. ou H.S.B. en anglais) qui est une manière différente de représenter les couleurs. Je publierai un prochain article concernant cet autre système de codage. La Teinte s’exprime en degrés, la Saturation et la Luminosité en pourcentage. Sous forme de sous-programme, la sub proposée ci-dessous prend en paramètres les valeurs R.V.B. comprises dans un intervalle classique de [0,255]. Les valeurs T.S.L. calculées sont des variables globales ayant comme intervalle : - Teinte en degrés : [0,359] - Saturation en pourcent : [0,100] - Luminosité en pourcent : [0,100] Certains programmes utilisent un intervalle [0,240], voire [0,1], pour représenter les valeurs T.S.L. Une simple opération mathématique permettra de passer d’une notation à une autre. - Code:
-
' RVB vers TSL (RGB to HSL) ' Marc - Mai 2022 ' Ecrit en langage Panoramic
dim rouge%,vert%,bleu% dim teinte,saturation,luminosite
caption 0,"RVB vers TSL (RGB to HSL)"
' ******* SAISIR ICI LES VALEURS RVB à CONVERTIR ******* rouge% = 82 vert% = 152 bleu% = 87
rvb2tsl(rouge%,vert%,bleu%) print " R,V,B = " + str$(rouge%) + "," + str$(vert%) + "," + str$(bleu%) print print " Teinte = " + str$(teinte) + "°" print " Saturation = " + str$(saturation) + "%" print " Luminosité = " + str$(luminosite) + "%"
end ' ------------------------------------------------------------------------------ sub rvb2tsl(r1,v1,b1) dim_local mini, maxi, ecart
' conversion rvb dans l'intervalle [0,1] r1 = r1 / 255 v1 = v1 / 255 b1 = b1 / 255
' recherche de la plus grande valeur parmi les composantes r,v,b maxi = max(r1,max(v1,b1))
' recherche de la plus petite valeur parmi les composantes r,v,b mini = min(r1,min(v1,b1))
' calcul luminosité luminosite = (maxi + mini) / 2
' calcul de l'écart entre la valeur mini et maxi ecart = maxi - mini
' calcul de la teinte et de la saturation if ecart = 0 teinte = 0 saturation = 0 else ' calcul de la saturation if luminosite < 0.5 then saturation = ecart / (maxi + mini) if luminosite >= 0.5 then saturation = ecart / (2 - maxi - mini )
' calcul de la teinte if r1 = maxi then teinte = ( v1 - b1 ) / ecart if v1 = maxi then teinte = 2 + ((b1 - r1) / ecart) if b1 = maxi then teinte = 4 + ((r1 - v1) / ecart) end_if
' conversion de la teinte en degrés [0,360] teinte = int(teinte * 60) teinte = wrap_value(teinte)
' conversion saturation en pourcentage [0,100%] saturation = int(saturation * 100)
' conversion luminance en pourcentage [0,100%] luminosite = int(luminosite * 100) end_sub
Prochains articles sur le thème de la colorimétrie : - Convertisseur TLS => RVB - Convertisseur RVB => TSV - Convertisseur TSV => RVB A bientôt ! Récapitulatif des articles concernant les convertisseurs colorimétriques: RVB vers TSL : https://panoramic.1fr1.net/t6749-colorimetrie-convertisseur-rvb-vers-tslTSL vers RVB : https://panoramic.1fr1.net/t6755-colorimetrie-convertisseur-tsl-vers-rvbRVB vers TSV : https://panoramic.1fr1.net/t6754-colorimetrie-convertisseur-rvb-vers-tsv TSV vers RVB : https://panoramic.1fr1.net/t6756-colorimetrie-convertisseur-tsv-vers-rvbEdit du 09/05/2022 : Optimisation du code-source suivant les conseils ci-dessous de Papydall.
Dernière édition par Marc le Mar 10 Mai 2022 - 11:39, édité 5 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Colorimétrie : convertisseur RVB vers TSL Dim 8 Mai 2022 - 4:04 | |
| Après une absence de deux mois, me revoilà de retour! Donc, salut / bonjour / bonsoir à tous. @Marc Merci pour le partage. Pour le calcul du maxi et du mini, tu as codé comme ceci - Code:
-
' recherche de la plus grande valeur parmi les composantes r,v,b if r1 >= v1 and r1 >= b1 then maxi = r1 if v1 >= r1 and v1 >= b1 then maxi = v1 if b1 >= r1 and b1 >= v1 then maxi = b1
' recherche de la plus petite valeur parmi les composantes r,v,b if r1 <= v1 and r1 <= b1 then mini = r1 if v1 <= r1 and v1 <= b1 then mini = v1 if b1 <= r1 and b1 <= v1 then mini = b1
Moi, je coderais comme ceci : - Code:
-
' recherche de la plus grande valeur parmi les composantes r,v,b maxi = max(r1,max(v1,b1))
' recherche de la plus petite valeur parmi les composantes r,v,b mini = min(r1,min(v1,b1))
Ce n'est qu'un detail, mais j'aime bien faire les choses autrement. Cette manière de faire permet d'économiser plusieurs lignes de IF ... THEN surtout quand on est devant une serie de valeurs. - Code:
-
dim a,b,c,d,e,f dim maxi,mini a = 12 : b = 1 : c = 37 : d = -123 : e = 99 : f = 0 maxi = max(a,max(b,max(c,max(d,max(e,f))))) mini = min(a,min(b,min(c,min(d,min(e,f))))) print "maxi = " ; maxi print "mini = " ; mini
Une autre façon de coder : - Code:
-
dim a,b,c,d,e,f,g,h,i,j,k,l,m dim mini,maxi ' initialisation a = 12 : b = 17 : c = -13 : d =123 : e = 95123 : f = -159875 : g = 123 : h = 0 i = 178 : j = -96 : k = 0 : l = sin(pi/17) : m = sqr(123)
' calcul du maxi maxi = max(max(max(max(max(max(max(max(max(max(max(max(a,b),c),d),e),f),g),h),i),j),k),l),m) ' calcul du mini mini = min(min(min(min(min(min(min(min(min(min(min(min(a,b),c),d),e),f),g),h),i),j),k),l),m) print "maxi = " ; maxi print "mini = " ; mini
Au plaisir de lire les "Prochains articles sur le thème de la colorimétrie " | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Colorimétrie : convertisseur RVB vers TSL Dim 8 Mai 2022 - 7:57 | |
| Bonjour Papydall ! Merci pour ton intervention - Citation :
- Pour le calcul du maxi et du mini...
Mince ! Je n'ai pas fait attention que les fonctions min() et max() existaient en Panoramic ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Colorimétrie : convertisseur RVB vers TSL Dim 8 Mai 2022 - 10:52 | |
| Les fonctions MAX(x,y) et MIN(x,y) retournent respectivement la plus grande et la plus petite valeur de x et y. Pour avoir la plus grande (respectivement la plus petite) valeur de plus de deux paramètres, l'astuce consiste à appeller récursivement ces fonctions selon ces deux formes : - Code:
-
maxi = max(a,max(b,max(c,d)))
ou - Code:
-
maxi = max(max(max(a,b),c),d)
Notre ami bignono (où est-il ?) à demandé ici de l'aide à propos de cette question. | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Colorimétrie : convertisseur RVB vers TSL Mer 11 Mai 2022 - 19:05 | |
| Merci messieurs pour ces moments de partage je prends un maximum de plaisir | |
| | | Contenu sponsorisé
| Sujet: Re: Colorimétrie : convertisseur RVB vers TSL | |
| |
| | | | Colorimétrie : convertisseur RVB vers TSL | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |