我对X11相对较新,并扩展了X11应用程序。我需要将类型Pixel
的变量中的颜色转换为RGB分量。
我的理解是,这取决于应用程序的视觉效果。对于 TrueColor 和 DirectColor 视觉效果,我可以查看XVisualInfo
并使用bits_per_rgb
和{red,green,blue}_mask
成员。
但是如何为 PseudoColor 或其他视觉效果做些什么呢?我需要的是诸如
之类的功能void PixelToRGB(Pixel p, XVisualInfo *v, uint16_t *r, uint16_t *g, uint16_t *b)
我正在阅读Xlib编程手册,但还无法找到如何实现此类功能的信息。
答案 0 :(得分:2)
我还没有完成Xlib编程,所以这是有根据的猜测,但你应该能够从相关窗口的ColorMap
获得XWindowAttributes
,并且像素值将是一个索引进入彩色地图。显然,查找是通过将像素填充到XColor
并使用它调用XQueryColor
来完成的,这将填充XColor
的{{1}},red
和green
个字段。我相信即使使用blue
和DirectColor
视觉效果也应该这样做,因为色彩图可以包含伽马校正等内容,也可能包含更奇怪的东西(奇怪的色彩循环效果?)一个TrueColor
视觉效果。