X11: 将像素值转换为 RGB

X11: Convert Pixel value to RGB

我对 X11 和扩展 X11 应用程序比较陌生。我需要将 Pixel 类型变量中的颜色转换为其 RGB 分量。 我的理解是,这取决于应用程序的视觉效果。对于 TrueColorDirectColor 视觉效果,我可以查看 XVisualInfo 并使用 bits_per_rgb{red,green,blue}_mask 成员.

但是如何处理 伪彩色 或其他视觉效果?我需要的是

这样的函数
void PixelToRGB(Pixel p, XVisualInfo *v, uint16_t *r, uint16_t *g, uint16_t *b)

我正在阅读 Xlib 编程手册,但尚未找到有关如何实现此类功能的信息。

我没有做过 Xlib 编程,所以这是有根据的猜测,但你应该能够从有问题的 window 的 XWindowAttributes 中得到 ColorMap,并且像素值将是颜色图中的索引。显然,查找是通过将像素填充到 XColor 并用它调用 XQueryColor 来完成的,这将填充 XColorredgreenblue 个字段。我相信即使使用 DirectColorTrueColor 视觉效果也应该这样做,因为颜色图可以包含诸如伽玛校正之类的东西,并且在DirectColor 视觉对象。