X11 的 XGetImage Funktion 总是返回 BadMatch Error

问题描述 投票:0回答:0

我正在尝试为 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 工作的方法,查看几个关于如何使用该函数的示例并阅读它的文档。但是经过数小时的更改参数以期发现我的错误。我什至没有接近答案。我希望能在这里找到一个。

c++ ubuntu x11
© www.soinside.com 2019 - 2024. All rights reserved.