Votre question

GTK+ et code hexadecimal des couleurs

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
1 Mars 2006 21:39:19

bonjour a tous,

Je suis en train d adapter un programme de generation d images de syntheses precedemment fait en libX en Gtk, pour le rendre plus convivial etc...

Seulement je suis confronté a un problement majeur : impossible de trouver comment afficher un pixel (point) dans un Widget DrawingArea selon le code hexadecimal des couleurs... Existe t il donc une fonction qui se charge du travail ou doit t on proceder d une autre maniere? j ai bien vu que les fichiers rc permettaient de changer de couleurs, mais ceci n est pas du tout suffisant pour un tel programme...

Voila merci de vos reponses,

Ps => je precise que se programme est ecris en C;

++

Autres pages sur : gtk code hexadecimal couleurs

a b L Programmation
1 Mars 2006 22:21:07

J'avais fait la même chose mais en win32API.

je connais pas très bien le gtk, mais en regardant la doc, j'ai vu:
gdk_gc_set_foreground (...) pour mettre la couleur et gdk_draw_point (...) pour afficher ton point.

gdk_gc_set_foreground() prend un :
  1. typedef struct {
  2. guint32 pixel;
  3. guint16 red;
  4. guint16 green;
  5. guint16 blue;
  6. } GdkColor;

en paramètre
donc si ton nombre est en hexa et sous 24 ou 32bits:
  1. red = (hexa & 0xFF0000) >> 16;
  2. green = (hexa & 0x00FF00) >> 8;
  3. blue = hexa & 0x0000FF;
2 Mars 2006 12:26:31

salut,

merci de ta reponse elle m'a beaucoup aide,

Je precise seulement que les composantes rgb dans la struct GdkColor sont :

  1. red = ((hexa & 0xFF0000) >> 16) * 256;
  2. green = ((hexa & 0x00FF00) >> 8) * 256;
  3. blue = (hexa & 0x0000FF) * 256;


Encore Merci ^^
++
a b L Programmation
2 Mars 2006 13:16:24

Ok, je viens de revoir la doc et ça varie effectivement de 0x0000 (0) à 0xFFFF (65535).

Bref, multiplier par 256, c'est multiplier par 2^8 soit faire un décalage à gauche de 8 bits:

  1. red = ((hexa & 0xFF0000) >> 16) * 256;
  2. green = ((hexa & 0x00FF00) >> 8) * 256;
  3. blue = (hexa & 0x0000FF) * 256;


<=>

  1. red = ((hexa & 0xFF0000) >> 16) << 8;
  2. green = ((hexa & 0x00FF00) >> 8) << 8;
  3. blue = (hexa & 0x0000FF) << 8;


<=>

  1. red = (hexa & 0xFF0000) >> 8;
  2. green = hexa & 0x00FF00;
  3. blue = (hexa & 0x0000FF) << 8;


Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS