2017-02-24 42 views
0

私は自分のlinux pcでスクリーンショットをキャプチャしようとしています。コードのコンパイルは大丈夫ですが、私はそれを実行しようとすると、それは以下のように同じエラーを投げ続けて:誰が問題であるかを把握するために私を助けることができるX11 XGetImage BadMatchエラー(無効なパラメータ属性)

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; 
} 
+0

を呼び出す前に

XMapRaised(d, root); 

を使用してDISPLAY環境変数設定されていますか?そうであれば、nullptrの代わりにNULLを使用してみてください。 – cup

+0

私は他のことに触れませんでした。そして、NULLは機能しません。 –

+0

XOpenDisplayのパラメータがNULLまたはnullptrの場合、DISPLAY環境変数の値が使用されます。 DISPLAY環境変数が設定されていないと、エラーが発生します。 – cup

答えて

0

エラーBadMatchアンInputOnlyのウィンドウがドロウアブルとして使用されている

https://tronche.com/gui/x/xlib/graphics/XGetImage.htmlから:

は、ここでは、コードです。

BadMatch一部の引数または引数のペアには正しい型と範囲がありますが、要求によって要求される他の方法で一致しません。

イメージを取得する前に、ウィンドウを最初にマップする必要があります。 XGetImageは

+0

はまだ動作しません。 (X_GetImage) 失敗したリクエストのシリアル番号:9 出力ストリームの現在のシリアルナンバー:9 これは私が得たエラーです: 'X失敗したリクエストのエラー:BadMatch(無効なパラメータ属性) 失敗したリクエストの主なオペコード: ' –

+0

ディスプレイのサイズはどのくらいですか?少なくとも1000x1000以下ですか?ディスプレイが1000x1000より小さい場合、このエラーが発生します。 – cup

+0

1000x1000より小さい場合、XGetImageの幅と高さのパラメータを画面のサイズに変更します – cup

関連する問題