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 |
|
|
| Conversion RGB/HSV | |
| | Auteur | Message |
---|
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Conversion RGB/HSV Sam 21 Sep 2013 - 10:53 | |
| Un programme de conversion avec 3 SUBs : - Code:
-
' ******************************************************************* ' Procedures de conversion RGB/HSV ' ******************************************************************* ' Adapte de http://www.cs.rit.edu/~ncs/color/t_convert.html ' R, G, B = [0..255] ' H = [0..360], S = [0..1], V = [0..1] ' si S = 0, H = 0 par defaut ' *******************************************************************
' Variables globales des procedures dim RGB_R%, RGB_G%, RGB_B%, RGB_Hex$, HSV_H, HSV_S, HSV_V
' Variables globales du programme principal dim R%, G%, B%, H, S, V
' ------------------------------------------- ' Description des objets ' -------------------------------------------
' Fenêtre principale
left 0, 220 top 0, 200 width 0, 390 height 0, 250 caption 0, "Conversion HSV / RGB"
' Spins 1-6 (Saisie des données)
spin 1 : ' Teinte (Hue) left 1, 20 top 1, 30 width 1, 75 min 1, 0 max 1, 360
spin 2 : ' Saturation left 2, 20 top 2, 80 width 2, 75 min 2, 0 max 2, 100
spin 3 : ' Luminosite (Value) left 3, 20 top 3, 130 width 3, 75 min 3, 0 max 3, 100
spin 4 : ' Rouge left 4, 290 top 4, 30 width 4, 75 min 4, 0 max 4, 255
spin 5 : ' Vert left 5, 290 top 5, 80 width 5, 75 min 5, 0 max 5, 255
spin 6 : ' Bleu left 6, 290 top 6, 130 width 6, 75 min 6, 0 max 6, 255
' Boutons 7-8 (Conversions)
button 7 left 7, 20 top 7, 180 caption 7, "HSV --> RGB"
button 8 left 8, 290 top 8, 180 caption 8, "RGB --> HSV"
' Label 9 (Affichage de la couleur)
alpha 9 left 9, 120 top 9, 10 width 9, 140 height 9, 150 color 9, 0, 0, 0
' Labels 10-16 (Etiquettes)
alpha 10 left 10, 120 top 10, 185 width 10, 140 height 10, 25 caption 10, "Hexadécimal"
alpha 11 left 11, 20 top 11, 10 width 11, 75 caption 11, "Teinte (H)"
alpha 12 left 12, 20 top 12, 60 width 12, 75 caption 12, "Saturation (S)"
alpha 13 left 13, 20 top 13, 110 width 13, 75 caption 13, "Luminosité (V)"
alpha 14 left 14, 290 top 14, 10 width 14, 75 caption 14, "Rouge (R)"
alpha 15 left 15, 290 top 15, 60 width 15, 75 caption 15, "Vert (G)"
alpha 16 left 16, 290 top 16, 110 width 16, 75 caption 16, "Bleu (B)"
' Edit 17 (Code hexadecimal)
edit 17 left 17, 190 top 17, 180 width 17, 70
' ---------------------------------------------- ' Affectation des sous-programmes aux événements ' ----------------------------------------------
label HSV_RGB, RGB_HSV
on_click 7, HSV_RGB on_click 8, RGB_HSV
' ------------------------------------------- ' Fin du programme principal ' -------------------------------------------
end
' ------------------------------------------- ' Sous-programmes ' -------------------------------------------
HSV_RGB: H = position(1) S = position(2) / 100 V = position(3) / 100
HSVtoRGB(H, S, V) RGBtoHex(RGB_R%, RGB_G%, RGB_B%)
color 9, RGB_R%, RGB_G%, RGB_B% text 17, "#" + RGB_Hex$
position 4, RGB_R% position 5, RGB_G% position 6, RGB_B% return
RGB_HSV: R% = position(4) G% = position(5) B% = position(6)
RGBtoHSV(R%, G%, B%) RGBtoHex(R%, G%, B%)
color 9, R%, G%, B% text 17, "#" + RGB_Hex$
position 1, int(HSV_H) position 2, int(100 * HSV_S) position 3, int(100 * HSV_V) return
' ------------------------------------------- ' Procedures ' -------------------------------------------
sub RGBtoHSV(R%, G%, B%) ' Conversion RGB --> HSV ' Resultat dans HSV_H, HSV_S, HSV_V
dim_local RR, GG, BB, Mini, Maxi, Delta
RR = R% / 255 GG = G% / 255 BB = B% / 255
Mini = RR if GG < Mini then Mini = GG if BB < Mini then Mini = BB
Maxi = RR if GG > Maxi then Maxi = GG if BB > Maxi then Maxi = BB
HSV_V = Maxi
if (Maxi = 0) or (Maxi = Mini) HSV_S = 0 HSV_H = 0 exit_sub end_if
Delta = Maxi - Mini
HSV_S = Delta / Maxi if RR = Maxi then HSV_H = (GG - BB) / Delta : ' entre jaune & magenta if GG = Maxi then HSV_H = 2 + (BB - RR) / Delta : ' entre cyan & jaune if BB = Maxi then HSV_H = 4 + (RR - GG) / Delta : ' entre magenta & cyan
HSV_H = HSV_H * 60 if HSV_H < 0 then HSV_H = HSV_H + 360 : ' degres
end_sub
sub HSVtoRGB(H, S, V) ' Conversion HSV --> RGB ' Resultat dans RGB_R%, RGB_G%, RGB_B%
if S = 0 RGB_R% = int(V * 255) RGB_G% = RGB_R% RGB_B% = RGB_R% exit_sub end_if
dim_local I%, Z, F, P, Q, T, RR, GG, BB
Z = H / 60 I% = int(Z) F = frac(Z) P = V * (1 - S) Q = V * (1 - S * F) T = V * (1 - S * (1 - F))
select I% case 0 RR = V : GG = T : BB = P case 1 RR = Q : GG = V : BB = P case 2 RR = P : GG = V : BB = T case 3 RR = P : GG = Q : BB = V case 4 RR = T : GG = P : BB = V case 5 RR = V : GG = P : BB = Q end_select
RGB_R% = int(RR * 255) RGB_G% = int(GG * 255) RGB_B% = int(BB * 255)
end_sub
sub RGBtoHex(R%, G%, B%) ' Convertit le code RGB en une chaine de 6 caracteres ("0A0BCC" ...) ' Resultat dans RGB_Hex$
dim_local RH$, GH$, BH$ RH$ = Hex$(R%) : if R% < 16 then RH$ = "0" + RH$ GH$ = Hex$(G%) : if G% < 16 then GH$ = "0" + GH$ BH$ = Hex$(B%) : if B% < 16 then BH$ = "0" + BH$ RGB_Hex$ = RH$ + GH$ + BH$
end_sub
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Sam 21 Sep 2013 - 12:17 | |
| Super ! Une petite remarque tout de même. Il serait bien que la couleur du picture évolue avec le réglage par les "Spin" au lieu des boutons de conversion. La visualisation peut permettre le choix de la couleur avant de convertir son code. Ceci dit, je garde ! Très pratique quand on s' amuse à modifier des fichiers html et autres. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Conversion RGB/HSV Sam 21 Sep 2013 - 12:28 | |
| C'est clair, de jolies sub à rajouter sur le site et qui évitent de passer par une dll externe Je pense que ces sub seraient bien dans la collection sur le site | |
| | | Mumu
Nombre de messages : 176 Localisation : 45 Date d'inscription : 20/12/2012
| Sujet: Re: Conversion RGB/HSV Sam 21 Sep 2013 - 15:03 | |
| Pas mal du tout... Merci j'archive | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Conversion RGB/HSV Sam 21 Sep 2013 - 20:58 | |
| Conversion très utile, mais je suis de l'avis de Ygeronimi pour que la couleur évolue en temps réel. C'est néanmoins un programme intéressant qui inclus en plus des couleurs, les teintes et saturations. Bravo Jean
A+ | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 23 Sep 2013 - 17:50 | |
| Sub RGBtoHex(R%,G%,B%) est sur le site Je vais voir pour les autres... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 23 Sep 2013 - 19:40 | |
| Bon, c' est fait, les trois subs sont sur le site ! Je les ai un peu modifier (les variables sont déclarés par la sub ) pour les rendre autonomes... elles sont dans deux catégories, "Colorisation" et "Conversions". | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Conversion RGB/HSV Mar 24 Sep 2013 - 8:48 | |
| Merci, Ygeronimi J'avais regardé la liste des procédures sur le site du magazine, mais je n'avais rien trouvé sur ce type de conversion. C'est ce qui m'a incité à reprendre un de mes anciens programmes, lequel utilisait une DLL car il n'y avait pas encore de SUBs à l'époque. Ces procédures seront utilisées dans un article à venir sur la coloration des fractales. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 24 Sep 2013 - 11:17 | |
| Il n' y a pas de quoi ! | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Conversion RGB/HSV Jeu 24 Oct 2013 - 10:08 | |
| Nouvelle version : 1) Il y a 3 fichiers : - rgb_vars.inc pour dimensionner les variables globales des procédures - rgb_subs.inc pour le code des procédures - rgb_hsv.bas pour le programme de démonstration 2) Dans le programme de démo : - la couleur et le code hexadécimal sont affichés à chaque modification des spins - la conversion est faite lorsqu'on clique sur les boutons rgb_vars.inc : - Code:
-
' ******************************************************************* ' Variables globales des procedures de conversion RGB/HSV ' *******************************************************************
dim RGB_R%, RGB_G%, RGB_B% : ' 0..255 dim HSV_H : ' 0..360 dim HSV_S, HSV_V : ' 0..1
dim RGB_Hex$ : ' Code RGB en hexadecimal (ex. 0A1B2C)
' *******************************************************************
rgb_subs.inc : - Code:
-
' ******************************************************************* ' Procedures de conversion RGB/HSV ' ******************************************************************* ' Adapte de http://www.cs.rit.edu/~ncs/color/t_convert.html ' R, G, B = [0..255] ' H = [0..360], S = [0..1], V = [0..1] ' si S = 0, H = 0 par defaut ' *******************************************************************
sub RGBtoHSV(R%, G%, B%) ' Conversion RGB --> HSV ' Resultat dans HSV_H, HSV_S, HSV_V
dim_local RR, GG, BB, Mini, Maxi, Delta
RR = R% / 255 GG = G% / 255 BB = B% / 255
Mini = RR if GG < Mini then Mini = GG if BB < Mini then Mini = BB
Maxi = RR if GG > Maxi then Maxi = GG if BB > Maxi then Maxi = BB
HSV_V = Maxi
if (Maxi = 0) or (Maxi = Mini) HSV_S = 0 HSV_H = 0 exit_sub end_if
Delta = Maxi - Mini
HSV_S = Delta / Maxi if RR = Maxi then HSV_H = (GG - BB) / Delta : ' entre jaune & magenta if GG = Maxi then HSV_H = 2 + (BB - RR) / Delta : ' entre cyan & jaune if BB = Maxi then HSV_H = 4 + (RR - GG) / Delta : ' entre magenta & cyan
HSV_H = HSV_H * 60 if HSV_H < 0 then HSV_H = HSV_H + 360 : ' degres
end_sub
sub HSVtoRGB(H, S, V) ' Conversion HSV --> RGB ' Resultat dans RGB_R%, RGB_G%, RGB_B%
if S = 0 RGB_R% = int(V * 255) RGB_G% = RGB_R% RGB_B% = RGB_R% exit_sub end_if
dim_local I%, Z, F, P, Q, T, RR, GG, BB
Z = H / 60 I% = int(Z) F = frac(Z) P = V * (1 - S) Q = V * (1 - S * F) T = V * (1 - S * (1 - F))
select I% case 0 RR = V : GG = T : BB = P case 1 RR = Q : GG = V : BB = P case 2 RR = P : GG = V : BB = T case 3 RR = P : GG = Q : BB = V case 4 RR = T : GG = P : BB = V case 5 RR = V : GG = P : BB = Q end_select
RGB_R% = int(RR * 255) RGB_G% = int(GG * 255) RGB_B% = int(BB * 255)
end_sub
sub RGBtoHex(R%, G%, B%) ' Convertit le code RGB en une chaine de 6 caracteres ("0A0BCC" ...) ' Resultat dans RGB_Hex$
dim_local RH$, GH$, BH$ RH$ = Hex$(R%) : if R% < 16 then RH$ = "0" + RH$ GH$ = Hex$(G%) : if G% < 16 then GH$ = "0" + GH$ BH$ = Hex$(B%) : if B% < 16 then BH$ = "0" + BH$ RGB_Hex$ = RH$ + GH$ + BH$
end_sub
rgb_hsv.bas - Code:
-
' ******************************************************************* ' Conversion RGB/HSV ' *******************************************************************
' Variables globales des procedures #include "rgb_vars.inc"
' Variables globales du programme principal dim R%, G%, B%, H, S, V
' ------------------------------------------- ' Description des objets ' -------------------------------------------
' Fenêtre principale
left 0, 220 top 0, 200 width 0, 390 height 0, 250 caption 0, "Conversion HSV / RGB"
' Spins 1-6 (Saisie des données)
spin 1 : ' Teinte (Hue) left 1, 20 top 1, 30 width 1, 75 min 1, 0 max 1, 360
spin 2 : ' Saturation left 2, 20 top 2, 80 width 2, 75 min 2, 0 max 2, 100
spin 3 : ' Luminosite (Value) left 3, 20 top 3, 130 width 3, 75 min 3, 0 max 3, 100
spin 4 : ' Rouge left 4, 290 top 4, 30 width 4, 75 min 4, 0 max 4, 255
spin 5 : ' Vert left 5, 290 top 5, 80 width 5, 75 min 5, 0 max 5, 255
spin 6 : ' Bleu left 6, 290 top 6, 130 width 6, 75 min 6, 0 max 6, 255
' Boutons 7-8 (Conversions)
button 7 left 7, 20 top 7, 180 caption 7, "HSV --> RGB"
button 8 left 8, 290 top 8, 180 caption 8, "RGB --> HSV"
' Label 9 (Affichage de la couleur)
alpha 9 left 9, 120 top 9, 10 width 9, 140 height 9, 150 color 9, 0, 0, 0
' Labels 10-16 (Etiquettes)
alpha 10 left 10, 120 top 10, 185 width 10, 140 height 10, 25 caption 10, "Hexadécimal"
alpha 11 left 11, 20 top 11, 10 width 11, 75 caption 11, "Teinte (H)"
alpha 12 left 12, 20 top 12, 60 width 12, 75 caption 12, "Saturation (S)"
alpha 13 left 13, 20 top 13, 110 width 13, 75 caption 13, "Luminosité (V)"
alpha 14 left 14, 290 top 14, 10 width 14, 75 caption 14, "Rouge (R)"
alpha 15 left 15, 290 top 15, 60 width 15, 75 caption 15, "Vert (G)"
alpha 16 left 16, 290 top 16, 110 width 16, 75 caption 16, "Bleu (B)"
' Edit 17 (Code hexadecimal)
edit 17 left 17, 190 top 17, 180 width 17, 70
' ---------------------------------------------- ' Affectation des sous-programmes aux événements ' ----------------------------------------------
label Show_HSV, Show_RGB, HSV_RGB, RGB_HSV
on_change 1, Show_HSV on_change 2, Show_HSV on_change 3, Show_HSV
on_change 4, Show_RGB on_change 5, Show_RGB on_change 6, Show_RGB
on_click 7, HSV_RGB on_click 8, RGB_HSV
' ------------------------------------------- ' Fin du programme principal ' -------------------------------------------
end
' ------------------------------------------- ' Sous-programmes ' -------------------------------------------
Show_HSV: H = position(1) S = position(2) / 100 V = position(3) / 100
HSVtoRGB(H, S, V) RGBtoHex(RGB_R%, RGB_G%, RGB_B%)
color 9, RGB_R%, RGB_G%, RGB_B% text 17, "#" + RGB_Hex$ return
Show_RGB: R% = position(4) G% = position(5) B% = position(6)
RGBtoHex(R%, G%, B%)
color 9, R%, G%, B% text 17, "#" + RGB_Hex$ return
HSV_RGB: HSVtoRGB(H, S, V) position 4, RGB_R% position 5, RGB_G% position 6, RGB_B% return
RGB_HSV: RGBtoHSV(R%, G%, B%) position 1, int(HSV_H) position 2, int(100 * HSV_S) position 3, int(100 * HSV_V) return
' ------------------------------------------- ' Procedures ' -------------------------------------------
#include "rgb_subs.inc"
| |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Conversion RGB/HSV Sam 26 Oct 2013 - 11:00 | |
| Un autre petit programme de démonstration. Celui-ci génère un gradient de couleurs en faisant varier la teinte (H) tout en maintenant constantes la saturation (S) et la luminosité (V). On peut bien sûr adapter le programme pour faire varier l'un quelconque des 3 paramètres. - Code:
-
' ******************************************************************* ' Gradient de couleurs ' *******************************************************************
' Variables globales des procedures #include "rgb_vars.inc"
' Variables globales du programme dim x%, xmax%, ymax%, H, Hmin, Hmax, Scale, S, V
xmax% = 400 ymax% = 40
' ------------------------------------------- ' Description des objets ' -------------------------------------------
' Fenêtre principale
left 0, 200 top 0, 200 width 0, xmax% + 30 height 0, ymax% + 60 caption 0, "Gradient de couleurs"
picture 1 left 1, 10 top 1, 10 width 1, xmax% height 1, ymax%
' ------------------------------------------- ' Programme principal ' -------------------------------------------
' Ici on fait varier la teinte (H) de Hmin à Hmax ' La saturation (S) et la luminosité (V) ont leur valeur maximale (1)
Hmin = 0 Hmax = 360
S = 1 V = 1
Scale = (Hmax - Hmin) / xmax%
2d_target_is 1
for x% = 1 to xmax% H = Hmin + x% * Scale HSVtoRGB(H, S, V) 2d_pen_color RGB_R%, RGB_G%, RGB_B% 2d_line x%, 1, x%, ymax% next x%
end
' ------------------------------------------- ' Procedures ' -------------------------------------------
#include "rgb_subs.inc"
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 26 Oct 2013 - 13:26 | |
| Cela donne un superbe effet. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 26 Oct 2013 - 13:27 | |
| Cela donne un superbe effet. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Conversion RGB/HSV Sam 26 Oct 2013 - 16:18 | |
| Reponse depuis mon S3, panne internet au moins jusqu a lundi donc pas de testd et apres deplacement a Nantes puis week end a Rennes. Je ne vais pas pouvoir tester bcp...
| |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Conversion RGB/HSV Sam 2 Nov 2013 - 8:58 | |
| Voici le generateur de gradient sous forme de SUB (à ajouter à rgb_subs.inc) - Code:
-
sub HSV_Gradient(Object%, Orient%, iP%, Pmin, Pmax, PC1, PC2) ' Dessine un gradient de couleurs en faisant varier un des ' parametres H, S ou V tout en maintenant les 2 autres constants
' Object% = numero de l'objet sur lequel on dessine ' Orient% = orientation du gradient : 1 = vertical, 2 = horizontal ' iP% = indice du parametre variable : 1 = H, 2 = S, 3 = V ' Pmin, Pmax = bornes du parametre variable ' PC1, PC2 = valeurs des parametres constants (dans l'ordre H, S, V)
dim_local h%, w%, i%, imax%, Scale, P
h% = height(Object%) w% = width(Object%)
select Orient% case 1 : imax% = w% case 2 : imax% = h% end_select
Scale = (Pmax - Pmin) / imax%
2d_target_is Object%
for i% = 0 to imax% P = Pmin + i% * Scale
if iP% = 1 HSVtoRGB(P, PC1, PC2) else if iP% = 2 HSVtoRGB(PC1, P, PC2) else HSVtoRGB(PC1, PC2, P) end_if end_if
2d_pen_color RGB_R%, RGB_G%, RGB_B%
select Orient% case 1 : 2d_line i%, 0, i%, h% case 2 : 2d_line 0, i%, w%, i% end_select next i% end_sub
Le programme de test devient alors très simple : - Code:
-
' ******************************************************************* ' Gradient de couleurs ' *******************************************************************
' Variables globales des procedures #include "rgb_vars.inc"
' Variables globales du programme (dimensions de l'image) dim xmax%, ymax%
xmax% = 300 ymax% = 300
' ------------------------------------------- ' Description des objets ' -------------------------------------------
' Fenêtre principale
left 0, 200 top 0, 200 width 0, xmax% + 30 height 0, ymax% + 60 caption 0, "Gradient de couleurs"
picture 1 left 1, 10 top 1, 10 width 1, xmax% height 1, ymax%
' ------------------------------------------- ' Programme principal ' -------------------------------------------
' Ici on fait varier la teinte (H) de 0 à 360° ' La saturation (S) et la luminosité (V) ont leur valeur maximale (= 1)
HSV_Gradient(1, 1, 1, 0, 360, 1, 1)
file_save 1, "gradient.bmp"
end
' ------------------------------------------- ' Procedures ' -------------------------------------------
#include "rgb_subs.inc"
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Conversion RGB/HSV Sam 2 Nov 2013 - 18:21 | |
| OK, je vois ça demain soir en rentrant | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Conversion RGB/HSV Mer 20 Nov 2013 - 9:47 | |
| Voici le programme de gradient réécrit avec les procédures KGF_OBJ de Klaus. Cela marche très bien - Code:
-
' ******************************************************************* ' Gradient de couleurs ' *******************************************************************
' Variables globales des procedures RGB/HSV #include "rgb_vars.inc"
' Variable globale de KGF_OBJ dim no%
' Variables globales du programme dim xmax%, ymax%, NumPic%
xmax% = 300 ymax% = 300
' ------------------------------------------- ' Description des objets ' -------------------------------------------
' Fenetre principale
top 0, 100 left 0, 100 width 0, xmax% + 30 height 0, ymax% + 60 caption 0, "Gradient de couleurs"
' Picture
xPicture(10, 10, xmax%, ymax%, 0)
NumPic% = no%
' ------------------------------------------- ' Programme principal ' -------------------------------------------
' Ici on fait varier la teinte (H) de 0 à 360° ' La saturation (S) et la luminosité (V) ont leur valeur maximale (= 1)
HSV_Gradient(NumPic%, 1, 1, 0, 360, 1, 1)
file_save NumPic%, "gradient.bmp"
end
' ------------------------------------------- ' Procedures ' -------------------------------------------
#include "rgb_subs.inc" #include "KGF_OBJ.bas"
| |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Conversion RGB/HSV Dim 24 Nov 2013 - 10:50 | |
| Voici une version légèrement modifiée du programme de conversion, avec les procédures de Klaus. - Code:
-
' ******************************************************************* ' Conversion RGB/HSV ' *******************************************************************
' Variables globales des procedures #include "rgb_vars.inc"
' Variables globales du programme principal dim R%, G%, B%, H, S, V
' ------------------------------------------- ' Description des objets ' -------------------------------------------
' Fenêtre principale (0)
top 0, 200 left 0, 220 width 0, 390 height 0, 250 caption 0, "Conversion HSV / RGB"
' Spins 1-6 (Saisie des données)
xSpin( 30, 20, 75, 0, 0, 360) : ' (1) Teinte (Hue) xSpin( 80, 20, 75, 0, 0, 100) : ' (2) Saturation xSpin(130, 20, 75, 0, 0, 100) : ' (3) Luminosite (Value) xSpin( 30, 290, 75, 0, 0, 255) : ' (4) Rouge xSpin( 80, 290, 75, 0, 0, 255) : ' (5) Vert xSpin(130, 290, 75, 0, 0, 255) : ' (6) Bleu
' Boutons 7-8 (Conversions)
xButton(180, 20, 75, 0, "HSV --> RGB") xButton(180, 290, 75, 0, "RGB --> HSV")
' Picture 9 (Affichage de la couleur)
xPicture(10, 120, 140, 150, 0)
' Labels 10-16 (Etiquettes)
xAlpha(185, 120, 0, 8, "Hexadécimal") xAlpha( 10, 20, 0, 8, "Teinte (H)") xAlpha( 60, 20, 0, 8, "Saturation (S)") xAlpha(110, 20, 0, 8, "Luminosité (V)") xAlpha( 10, 290, 0, 8, "Rouge (R)") xAlpha( 60, 290, 0, 8, "Vert (G)") xAlpha(110, 290, 0, 8, "Bleu (B)")
' Edit 17 (Code hexadecimal)
xEdit(180, 190, 70, 0, 1)
' ---------------------------------------------- ' Affectation des sous-programmes aux événements ' ----------------------------------------------
label Show_HSV, Show_RGB, HSV_RGB, RGB_HSV
on_change 1, Show_HSV on_change 2, Show_HSV on_change 3, Show_HSV
on_change 4, Show_RGB on_change 5, Show_RGB on_change 6, Show_RGB
on_click 7, HSV_RGB on_click 8, RGB_HSV
' ------------------------------------------- ' Programme principal ' -------------------------------------------
' Demarrer avec un rouge vif
position 1, 0 : ' H position 2, 100 : ' S (%) position 3, 100 : ' V (%) position 4, 255 : ' R position 5, 0 : ' G position 6, 0 : ' B
gosub Show_RGB
end
' ------------------------------------------- ' Sous-programmes ' -------------------------------------------
Show_HSV: H = position(1) S = position(2) / 100 V = position(3) / 100
HSVtoRGB(H, S, V) RGBtoHex(RGB_R%, RGB_G%, RGB_B%)
color 9, RGB_R%, RGB_G%, RGB_B% text 17, "#" + RGB_Hex$ return
Show_RGB: R% = position(4) G% = position(5) B% = position(6)
RGBtoHex(R%, G%, B%)
color 9, R%, G%, B% text 17, "#" + RGB_Hex$ return
HSV_RGB: HSVtoRGB(H, S, V) position 4, RGB_R% position 5, RGB_G% position 6, RGB_B% return
RGB_HSV: RGBtoHSV(R%, G%, B%) position 1, int(HSV_H) position 2, int(100 * HSV_S) position 3, int(100 * HSV_V) return
' ------------------------------------------- ' Procedures ' -------------------------------------------
#include "rgb_subs.inc" #include "KGF_OBJ.bas"
| |
| | | Contenu sponsorisé
| Sujet: Re: Conversion RGB/HSV | |
| |
| | | | Conversion RGB/HSV | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |