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.
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.

Poser une question


perlgenome
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.
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.
perlgenome
Ah oui. Je n'avais jamais remarqué.
Aucun rapport avec la machine. C'est Tk qui manipule des couleurs sur 48
bits (3x16bits).
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.