Faire des couleurs simplement en X11 ?

Faire des couleurs simplement en X11 ? - C - Programmation

Marsh Posté le 14-11-2007 à 20:19:13    

Salut,
 
Je suis en train de faire un projet de programmation où je vais avoir besoin de dessiner des ronds et des rectangles de couleur dans une fenêtre, tout ça en C, en utilisant X11 sous Linux. Pour faire un rectangle de taille 100x100 placé en (20,20), par exemple, après les déclarations habituelles, je fais :
 

Code :
  1. XSetForeground(display,main_gc,couleur);
  2. XFillRectangle(display,window,main_gc,20,20,100,100);


 
En ayant déclaré au préalable int couleur = (un code couleur). J'ai remarqué qu'en mettant couleur = 0, ça faisait du noir, en mettant couleur = 16^6 - 1 (donc FFFFFF en hexa), ça faisait du blanc, et je m'attendais à ce qu'en mettant couleur = 16*16 + 16 (donc 0000FF en hexa), ça me donne du bleu, et ça me donne bien du bleu, mais super sombre... par contre, 16*16 - 1 ça donne du bleu bien comme il faut...
 
Bref, la documentation sur ce qu'il faut mettre dans XSetForeground est pas très explicite, et je me perds dans les détails des tutos que j'ai trouvés. Pourtant, c'est pas dur : j'ai les trois coordonnées RVB d'une couleur en hexa, et je veux colorier mon rectangle de cette couleur... je dois mettre quoi dans ma variable couleur pour faire ça ?
 
Merci :jap:


Message édité par double clic le 15-11-2007 à 01:30:24

---------------
Tell me why all the clowns have gone.
Reply

Marsh Posté le 14-11-2007 à 20:19:13   

Reply

Marsh Posté le 14-11-2007 à 20:58:32    

Ah les joies de la Xlib et de son API néandertalienne. Bon, c'est évidemment plus compliqué que ça. D'abord tu dois allouer une couleur, suivant les réglages de ton display (colormap, pseudo-color, full-color), il se peut que les valeurs RVB dispo ne correspondent pas tout à fait à ce que tu veux.
 
La fonction kivabien est XAllocColor où tu devra renseigné une structure XColor. Dans cette structure tu renseignes les champs .spec.RGB.{red,green,blue} et .format = XcmsRGBFormat.
 
Tu appel ensuite XAllocColor et cette fonction va te retourner dans .pixel de ton XCollor, la valeur que tu peux mettre dans XSetForeground. Au passage elle va modifier les valeurs RVB pour refléter la vraie couleur qui sera utilisée. Évidemment si ton display est en true color, tout ce bordel ne sert à (presque) rien.
 
Yeaaarggll. Ah oui, et n'oubli de faire un XFreeColors pour chaque couleur allouée :(


Message édité par tpierron le 14-11-2007 à 21:03:21
Reply

Marsh Posté le 14-11-2007 à 21:09:45    

ah ouais [:psywalk]
 
bon, je vais regarder ça, merci :o


---------------
Tell me why all the clowns have gone.
Reply

Marsh Posté le 14-11-2007 à 21:13:44    

il me semble que X11 gere les couleurs en BGR et non pas RGB. A vérifier :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed