用Xcb而不是Xlib抓取像素的颜色

时间:2017-06-15 05:49:42

标签: c++ xlib xcb

我使用了几个窗口管理器,如果我理解正确,他们使用xlib。 (真棒,OPENBOX,Fluxbox的...)

我使用以下代码检测像素中“RED”的数量:

#include <iostream>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
using namespace std;
int main(int argc, char *argv[]){
    XColor c;
    Display *d = XOpenDisplay((char *) NULL);
    int RED;
    int x=atoi(argv[1]);
    int y=atoi(argv[2]);
    XImage *image;
    image = XGetImage (d, RootWindow (d, DefaultScreen (d)), x, y, 1, 1, AllPlanes, XYPixmap);
    c.pixel = XGetPixel (image, 0, 0);
    XFree (image);
    XQueryColor (d, DefaultColormap(d, DefaultScreen (d)), &c);
    RED=c.red/256;
    cout << RED;
}

但它始终与我的i3-gaps窗口管理器返回0。 (与他人合作)

我想这是因为i3不使用Xlib而是使用Xcb

如果是这样,我如何用Xcb实现同样的目标? (从Xlib语法向后兼容的东西?)

1 个答案:

答案 0 :(得分:0)

我刚刚将#include <X11/Xlib.h>替换为#include <xcb/xcb.h>

...惊人