Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Colorimétrie : convertisseur RVB vers TSV Mar 10 Mai 2022 - 10:06 | |
| Bonjour à tous ! T.S.V. (H.S.V. en anglais ou H.S.B.) 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 Valeur. Ne pas confondre avec le système T.S.L. (H.S.L. en anglais) qui est une manière différente de représenter les couleurs.La Teinte s’exprime en degrés, la Saturation et la Valeur 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.V. calculées sont des variables globales ayant comme intervalle : - Teinte en degrés : [0,359] - Saturation en pourcent : [0,100] - Valeur en pourcent : [0,100] Certains programmes utilisent un intervalle [0,240], voire [0,1], pour représenter les valeurs T.S.V. Une simple opération mathématique permettra de passer d’une notation à une autre. - Code:
-
' RVB vers TSV (RGB to HSV ou HSB) ' Marc - Mai 2022 ' Ecrit en langage Panoramic
dim r%,v%,b% dim teinte,saturation,valeur
caption 0,"RVB vers TSV (RGB to HSV/HSB)"
' ******* SAISIR ICI LES VALEURS RVB à CONVERTIR ******* r% = 82 v% = 157 b% = 87
RVB2TSV(r%,v%,b%) print " R,V,B = " + str$(r%) + "," + str$(v%) + "," + str$(b%) print print " Teinte = " + str$(teinte) + "°" print " Saturation = " + str$(saturation) + "%" print " Valeur = " + str$(valeur) + "%"
end
sub RVB2TSV(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 du paramètre valeur valeur = maxi
' calcul de l'écart entre la valeur mini et maxi ecart = maxi - mini
' calcul de la saturation if valeur = 0 saturation = 0 else saturation = ecart / valeur end_if
' calcul de la teinte if saturation = 0 teinte = 0 else if r1 = valeur then teinte = (v1 - b1) / ecart if v1 = valeur then teinte = 2 + ((b1 - r1) / ecart) if b1 = valeur then teinte = 4 + ((r1 - v1) / ecart) end_if
' conversion de la teinte en degrés [0,359] teinte = int(teinte * 60) teinte = wrap_value(teinte)
' conversion saturation en pourcentage [0,100] saturation = int(saturation * 1000)/10
' conversion valeur en pourcentage [0,100] valeur = int(valeur * 1000)/10 end_sub
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-rvb | |
|