GNT sans publicité, site mobile, fonctionnalitées exclusives...

Tk code hexa d'une couleur à partir du nom

Le
perlgenome
Bonjour,

Pouvez vous me dire comment obtenir le code hexa à partir d'un nom de
couleur en perl Tk. Existe il une méthode qui pourrait me le fournir.
Par exemple, afin d'obtenir #FF0000 pour la couleur 'red' ! Comment
Perl Tk fait il pour faire la correspondance entre les noms de couleur
et le code hexa. J'en ai besoin pour mettre à jour mon code dans mes
modules.

Merci.
Lire les 22 réponses

Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 5
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #22220311
À (at) Sun, 6 Jun 2010 14:43:40 -0700 (PDT),
perlgenome
Pouvez vous me dire comment obtenir le code hexa à partir d'un nom de
couleur en perl Tk. Existe il une méthode qui pourrait me le fournir.
Par exemple, afin d'obtenir #FF0000 pour la couleur 'red' ! Comment
Perl Tk fait il pour faire la correspondance entre les noms de couleur
et le code hexa. J'en ai besoin pour mettre à jour mon code dans mes
modules.



Tous les widget proposent la méthode 'rgb' qui prend comme argument une
couleur et qui retourne la liste de 3 valeurs *décimales* pour ses
composantes rouge, vert, bleu. Pour en savoir plus :

perldoc Tk::Widget

Ensuite, 'sprintf' peut faire la conversion hexa :

my ($r, $v, $b) = $widget->rgb('red');
my $hexcol = sprintf("#%02x%02x%02x", $r, $v, $b);

Ou, en factorisant :

my $hexcol = sprintf("#%02x%02x%02x", $widget->rgb('red'));

--
Paul Gaborit - Perl en français -
perlgenome
Le #22220341
On 7 juin, 00:11, Paul Gaborit
À (at) Sun, 6 Jun 2010 14:43:40 -0700 (PDT),
perlgenome
> Pouvez vous me dire comment obtenir le code hexa à partir d'un nom de
> couleur en perl Tk. Existe il une méthode qui pourrait me le fournir.
> Par exemple, afin d'obtenir #FF0000 pour la couleur 'red' ! Comment
> Perl Tk fait il pour faire la correspondance entre les noms de couleur
> et le code hexa. J'en ai besoin pour mettre à jour mon code dans mes
> modules.

Tous les widget proposent la méthode 'rgb' qui prend comme argument une
couleur et qui retourne la liste de 3 valeurs *décimales* pour ses
composantes rouge, vert, bleu. Pour en savoir plus :

       perldoc Tk::Widget

Ensuite, 'sprintf' peut faire la conversion hexa :

   my ($r, $v, $b) = $widget->rgb('red');
   my $hexcol = sprintf("#%02x%02x%02x", $r, $v, $b);

Ou, en factorisant :

   my $hexcol = sprintf("#%02x%02x%02x", $widget->rgb('red'));

--
Paul Gaborit - Perl en français -


Merci Paul, je suis bête, j'ai lu plusieurs fois cette doc sans y
faire attention. Merci.
perlgenome
Le #22220371
Autre question car j'ai un petit souci.
Je viens de constater que la méthode rgb pour red me retourne :
65535,0,0 au lieu de 255,0,0.
Ce qui veut dire que perl m'a retourné un code 16 bits de ce que j'ai
compris. donc mon calcul du code hexa est donc fossé.

Comment je fais pour savoir si ma machine est en 8 ou 16 bits pour les
couleurs ?
Et une fois trouvé, comment je passe le code rgb de 16 bits en 8 bits
si nécessaire.

Merci.
Paul Gaborit
Le #22220451
À (at) Sun, 6 Jun 2010 16:18:17 -0700 (PDT),
perlgenome
Autre question car j'ai un petit souci.
Je viens de constater que la méthode rgb pour red me retourne :
65535,0,0 au lieu de 255,0,0.



Ah oui. Je n'avais jamais remarqué.

Ce qui veut dire que perl m'a retourné un code 16 bits de ce que j'ai
compris. donc mon calcul du code hexa est donc fossé.

Comment je fais pour savoir si ma machine est en 8 ou 16 bits pour les
couleurs ?



Aucun rapport avec la machine. C'est Tk qui manipule des couleurs sur 48
bits (3x16bits).

Et une fois trouvé, comment je passe le code rgb de 16 bits en 8 bits
si nécessaire.



Il suffit de tout diviser par 256 :

my $hexcol = sprintf("#%02x%02x%02x", map {$_/256} $top->rgb('gray50'));

--
Paul Gaborit - Perl en français -
perlgenome
Le #22220711
On 7 juin, 01:32, Paul Gaborit
À (at) Sun, 6 Jun 2010 16:18:17 -0700 (PDT),
perlgenome
> Autre question car j'ai un petit souci.
> Je viens de constater que la méthode rgb pour red me retourne :
> 65535,0,0 au lieu de 255,0,0.

Ah oui. Je n'avais jamais remarqué.

> Ce qui veut dire que perl m'a retourné un code 16 bits de ce que j'ai
> compris. donc mon calcul du code hexa est donc fossé.

> Comment je fais pour savoir si ma machine est en 8 ou 16 bits pour les
> couleurs ?

Aucun rapport avec la machine. C'est Tk qui manipule des couleurs sur 48
bits (3x16bits).

> Et une fois trouvé, comment je passe le code rgb de 16 bits en 8 bits
> si nécessaire.

Il suffit de tout diviser par 256 :

 my $hexcol = sprintf("#%02x%02x%02x", map {$_/256} $top->rgb('gray50 '));

--
Paul Gaborit - Perl en français -


Merci Paul. Toujours aussi efficace.
Publicité
Suivre les réponses
Poster une réponse
Anonyme