使用 Xcb 而不是 Xlib 获取像素的颜色
Grab the color of a pixel with Xcb instead of Xlib
我使用了几个 window 管理器,如果我理解正确的话,他们使用 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
window 经理总是 return 0。 (与其他人一起工作 wm)
我猜这是因为 i3
没有使用 Xlib
而是 Xcb
。
如果是这样,我怎样才能用 Xcb
达到同样的效果? (Xlib 语法向后兼容?)
我刚刚将 #include <X11/Xlib.h>
替换为 #include <xcb/xcb.h>
。
太棒了...
我使用了几个 window 管理器,如果我理解正确的话,他们使用 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
window 经理总是 return 0。 (与其他人一起工作 wm)
我猜这是因为 i3
没有使用 Xlib
而是 Xcb
。
如果是这样,我怎样才能用 Xcb
达到同样的效果? (Xlib 语法向后兼容?)
我刚刚将 #include <X11/Xlib.h>
替换为 #include <xcb/xcb.h>
。
太棒了...