我使用几个窗口管理器,如果我理解正确的话,他们使用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;
}
但它总是返回0与我的i3-gaps
窗口管理器。(工程与其他wm)
我猜这是因为i3
不使用Xlib
而是使用Xcb
。
如果是这样,我如何用Xcb
实现同样的事情?(从Xlib语法向后兼容的东西?)
2条答案
按热度按时间50pmv0ei1#
我刚刚用
#include <xcb/xcb.h>
替换了#include <X11/Xlib.h>
。太神奇了...
q5lcpyga2#
这是一个纯C的例子,但它也可以在C++中使用。注意,我没有做任何错误检查,但它绝对应该被添加到任何东西中,而不仅仅是一个演示。