0

X の下に表示されていないウィンドウのスクリーンショットを作成しようとしています。

私の最初の試みは、xwdまたはimport(ImageMagickから)を使用してウィンドウをキャプチャすることでした。残念ながら、ウィンドウが他のウィンドウの下にある場合、隠れた部分は黒くなります。さらに悪いことに、ウィンドウが現在のデスクトップにない場合、BadMatchエラーが発生します。

次に考えたのは、この 1 つのアプリケーションのためだけに新しい X インスタンスを作成し、常に最上位にある Xnest を使用することでした。そして、私は他の問題に出くわします。Xnest は OpenGL をサポートしていません。

Google で検索すると、OpenGL をサポートしている [Xephyr][1] が見つかりました...ただし、ハードウェア アクセラレーションはサポートされていないため、CPU を消費するため、受け入れられません。

同じことが、CPU を使用して OpenGL をレンダリングする Xvfb にも当てはまります。以下は、 からの出力の一部ですglxinfo

OpenGL ベンダー文字列: Mesa Project
OpenGL レンダラー文字列: ソフトウェア ラスタライザー
OpenGL バージョン文字列: 2.1 Mesa 7.8.2
OpenGL シェーディング言語のバージョン文字列: 1.20

私が考えることができる唯一のことは、何らかの方法で Xlib を使用して、X サーバーにウィンドウを pixbuf にレンダリングさせることです。残念ながら、私は Xlib についてほとんど知識がありません。

私の質問は、X で OpenGL を使用するアプリケーションの非表示ウィンドウからスクリーンショットを取得するにはどうすればよいですか?

今のところ、[Python-Xlib][2] とPILを使用してスクリーンショットを作成することしかできません。また、Python または C を使用したその他のソリューションも受け入れられます。

4

1 に答える 1

0

私の知る限り、これは不可能です。問題は、文字通り保存しようとしているピクセルが存在しないことです。X サーバーとビデオ ドライバーは、目に見えないもののレンダリングを回避しようとしています。

Matias が言及しているように、GL アプリを制御できる場合は、おそらく GL でできることがあります。たとえば、framebuffer オブジェクト エクステンションを使用すると、オフスクリーン テクスチャにレンダリングできます。

于 2010-07-23T02:08:20.010 に答える