2015-10-31 1 views
0

Je suis relativement nouveau sur X11 et j'étends une application X11. J'ai besoin de convertir une couleur dans une variable de type Pixel en ses composants RVB. Je crois comprendre que cela dépend du visuel de l'application. Pour TrueColor et DirectColor visuels Je peux regarder le XVisualInfo et utiliser les bits_per_rgb et {red,green,blue}_mask membres.X11: Convertir la valeur de pixel en RGB

Mais que faire pour PseudoColor ou d'autres visuels? Ce que je besoin est une fonction telle que

void PixelToRGB(Pixel p, XVisualInfo *v, uint16_t *r, uint16_t *g, uint16_t *b) 

Je lis les manuels de programmation Xlib mais n'a pas pu trouver encore d'informations comment mettre en œuvre une telle fonction.

Répondre

1

Je n'ai pas fait de programmation Xlib donc c'est une conjecture raisonnée, mais vous devriez pouvoir obtenir le ColorMap du XWindowAttributes de la fenêtre en question, et la valeur de pixel sera un index dans la carte de couleur. Apparemment, la recherche est effectuée en introduisant le pixel dans un XColor et en appelant le XQueryColor, qui remplira les champs red, green et blue. Je crois que ceci est également supposé être fait même avec DirectColor et TrueColor visuels, car la palette de couleurs peut contenir des choses comme des corrections de gamma, et peut-être des choses plus bizarres (effets étranges de cycle de couleur?) Dans le cas d'un visuel DirectColor.

+0

'XQueryColor' est exactement ce dont j'ai besoin. Merci! – Jens