FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» I Love You
par JL35 Jeu 19 Oct 2017 - 16:25

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

» Un petit "coucou" à tous les Panoramiciens !
par Jack Ven 6 Oct 2017 - 10:24

» Pourquoi le compilateur stagne
par mindstorm Mer 4 Oct 2017 - 20:38

» Panoramic ?
par Marc37 Mer 4 Oct 2017 - 0:39

» Premiers pas avec Arduino
par Marc37 Mer 4 Oct 2017 - 0:29

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Conversion RGB/HSV

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
jean_debord

avatar

Nombre de messages : 756
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Conversion RGB/HSV   Sam 21 Sep 2013 - 11: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: Re   Sam 21 Sep 2013 - 13:17

cheers 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Conversion RGB/HSV   Sam 21 Sep 2013 - 13:28

C'est clair, de jolies sub à rajouter sur le site et qui évitent de passer par une dll externe    Wink
Je pense que ces sub seraient bien dans la collection sur le site
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Mumu



Nombre de messages : 172
Localisation : 45
Date d'inscription : 20/12/2012

MessageSujet: Re: Conversion RGB/HSV   Sam 21 Sep 2013 - 16:03

Pas mal du tout... Merci j'archive
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5040
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Conversion RGB/HSV   Sam 21 Sep 2013 - 21: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Lun 23 Sep 2013 - 18:50

Sub RGBtoHex(R%,G%,B%) est sur le site
Je vais voir pour les autres...Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Lun 23 Sep 2013 - 20: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...Embarassed 

elles sont dans deux catégories, "Colorisation" et "Conversions".
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 756
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Conversion RGB/HSV   Mar 24 Sep 2013 - 9:48

Merci, Ygeronimi Smile

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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 24 Sep 2013 - 12:17

Il n' y a pas de quoi ! Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 756
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Conversion RGB/HSV   Jeu 24 Oct 2013 - 11: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"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
jean_debord

avatar

Nombre de messages : 756
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Conversion RGB/HSV   Sam 26 Oct 2013 - 12: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"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 26 Oct 2013 - 14:26

Cela donne un superbe effet.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 26 Oct 2013 - 14:27

Cela donne un superbe effet.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Conversion RGB/HSV   Sam 26 Oct 2013 - 17: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...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 756
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Conversion RGB/HSV   Sam 2 Nov 2013 - 10: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"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Conversion RGB/HSV   Sam 2 Nov 2013 - 20:21

OK, je vois ça demain soir en rentrant Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jean_debord

avatar

Nombre de messages : 756
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Conversion RGB/HSV   Mer 20 Nov 2013 - 11:47

Voici le programme de gradient réécrit avec les procédures KGF_OBJ de Klaus. Cela marche très bien Smile

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"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
jean_debord

avatar

Nombre de messages : 756
Age : 63
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Conversion RGB/HSV   Dim 24 Nov 2013 - 12: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"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Contenu sponsorisé




MessageSujet: Re: Conversion RGB/HSV   

Revenir en haut Aller en bas
 
Conversion RGB/HSV
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Conversion fichier MVK
» Conversion 25p/24p
» [Résolu] Problème conversion mpeg2-DVD
» conversion gdb en gpx ?
» Résolu : Conversion de fichiers .csv en .gdb ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: