X11 XGetImage BadMatch错误(参数属性无效)

时间:2017-02-24 12:46:44

标签: c++ opencv x11

我正在尝试在我的linux pc上捕获屏幕截图。代码的编译很好但是如果我尝试执行它,它会不断抛出同样的错误:

X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  73 (X_GetImage)
  Serial number of failed request:  7
  Current serial number in output stream:  7

有人可以帮我弄清问题是什么吗?

以下是代码:

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

using namespace cv;

int main()
{
    Display* d = XOpenDisplay(nullptr);
    auto root = DefaultRootWindow(d);

    auto img = XGetImage(d, root, 0, 0, 1000, 1000, AllPlanes, ZPixmap);
    auto rimg = Mat(1000, 1000, CV_8UC4, img->data);
    imshow("test image", rimg);
    waitKey(0);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

来自https://tronche.com/gui/x/xlib/graphics/XGetImage.html

BadMatch InputOnly窗口用作Drawable。

BadMatch某些参数或参数对具有正确的类型和范围,但无法以请求所需的其他方式匹配。

在获取窗口图像之前,您需要首先映射窗口。使用

XMapRaised(d, root);

在调用XGetImage之前