2

PythonでDirectXゲームのスクリーンショットを撮る方法を探しています。私はすでにPILやその他のものを使おうとしましたが、最終的には黒いスクリーンショットしか表示されません。プロジェクトdirectpython11がいくつかのDirectXのものへのPythonバインディングを提供しているのを見ましたが、外部DirectXアプリケーションのスクリーンショットに関連するものは何も見つかりませんでした。

私はちょっと迷っています、そしてどんな助けでも大いに感謝されるでしょう;)。

PS:Windows7でPython2.7.332ビットを使用してコーディングしています。

ありがとう

4

1 に答える 1

5

これはかなり複雑なトピックです。

実際にスクリーンショットを撮るには、最も単純な方法で、バックバッファーを取得してファイルに書き込む必要があります。Python DirectX バインディングは、テクスチャを作成し、バック バッファまたはフロント バッファからデータで埋めるためのサポートを提供する必要があります。その後、画像の書き込みはあなた次第です。

残念ながら、バックバッファに到達するには、DirectX をフックし、アプリケーションがレンダリング コンテキストを取得する前に、レンダリング コンテキストをインターセプトする必要があります。単純ではありますが、これは十分に文書化されておらず、実装にはかなりの量の (C++) コードが必要です。制御する別のレンダー コンテキストをアプリケーションに強制的に使用させてから、自分でスクリーンショットを撮る必要があります。

このインターセプトの基本は、私の知る限り、純粋な Python では実行できません。表示コーデックを使用してメソッドを見つけることができる場合があります (コンポジターに配信された後に画面を取得する)、または既存の DirectX フックを使用して最小限の IPC を実装してデータを取得し、処理および書き込みのために Python にフィードすることができます。ファイルに。

編集:これを行うことに興味がある場合は、詳細を追加し、役立つコードへのリンクをいくつか追加できます。Pythonだけでそれが可能かどうかはまだわかりませんが、それでも試してみるのをやめないでください.

于 2013-01-07T22:30:38.713 に答える