我正在尝试为 ubuntu 制作一个 C++ 程序,它获取鼠标悬停的像素的 rgb 值。为此,我需要 XGetImage 函数,但它总是返回错误代码(不匹配)。
#include <iostream>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xresource.h>
int main(int, char**) {
XColor c;
Display *display = XOpenDisplay((char *) NULL);
Window root = XRootWindow(display, XDefaultScreen(display));
XWindowAttributes attr;
XGetWindowAttributes(display, root, &attr);
XMapRaised(display, root);
unsigned int width = attr.width;
unsigned int height = attr.height;
root = attr.root;
/*
XQueryPointer(display, win, &root, &child, &root_x, &root_y, &win_x, &win_y, &mask_return);
std::printf("root_x: %d\troot_y: %d\nchild_x: %d\tchild_y: %d\n",
root_x,
root_y,
win_x,
win_y
);*/
XMapRaised(display, root);
XImage *image = XGetImage(display, root, 0, 0, 100, 100, AllPlanes, ZPixmap);
c.pixel = XGetPixel(image, 0, 0);
std::cout << c.red << std::endl;
XFree(image);
XQueryColor(display, XDefaultColormap(display, XDefaultScreen(display)), &c);
std::cout << c.red << " " << c.green << " " << c.blue << std::endl;
XCloseDisplay(display);
return 0;
}
我已经通过浏览 stackoverflow 和 stackexchange 寻找让 XGetImage 工作的方法,查看几个关于如何使用该函数的示例并阅读它的文档。但是经过数小时的更改参数以期发现我的错误。我什至没有接近答案。我希望能在这里找到一个。