2011-02-11 13 views
2

Xlibを使用して、既存のWindowの内容を自分のWindowにコピーしたい。私はXCopyAreaを試して、2つのWindowsの間でコピーを拒否します。私もXGetImageとXPutImageを試しましたが、失敗しています。Xlibを使って1つのウィンドウの内容を別のウィンドウにコピーするにはどうすればいいですか?

ウィンドウのグラフィックコンテンツを自分のものにコピーするにはどうすればよいですか?

パートII:
以下の情報に基づいて、XCopyAreaとXGetImageを動作させることができました。それが動作しなかった理由は、ソースとデスティネーションのウィンドウの深さの違いでした。私は、異なるWindowsがデスクトップ上で異なる深さを持っていることに驚きました。

しかし、まだXCopyAreaでの成功は限られています。 からコピーを開始すると、Google ChromeのようにWindowsはタイトルバーだけをコピーすることはできません。 XGetImageはそのような場合にうまく動作します。 XCopyAreaがなぜのタイトルバーを超えてコピーしないのか何か手掛かりがある Windows?

答えて

3

XCopyAreaは問題ありません。 これは、コピー先のフォアグラウンドにのみコピーされることに注意してください。

コードがないと私は推測することができます。

を、それが失敗した場合、あなたは窓は間違いなく同じルートと深さを持っていることを確認していますか? また、X Window座標系を確認してください。あなたのコピーの隅が目的地の中央にあるようにコピーを試みて、あなたが何かを得ることができるかどうかを確かめてください。

通常、宛先ウィンドウ内でExposeイベントを処理してリフレッシュできるようにしたいとします。

私は中間点としてPixmapを作成することをお勧めします。 PixmapとWindowの両方が描画可能です。 XCopyAreaを使用してPixmapにコピーします。 次に、XSetWindowBackgroundPixmapを使用して実際に画像をレンダリングします。背景を設定すると、Exposeイベントを処理してイメージを再描画する必要性を無視できます。

+1

混乱を招くもう1つの方法は、不明瞭な/マップされていないソースウィンドウに意味のある内容があることを期待することです。 (slowpoison、 "失敗"(Xエラー?何もしないなど)を意味するものを記述するとよいでしょう) –

関連する問題