1

別の人もこれについて助けを求めていることに気付きました。その投稿を読みましたが、まだ解決されていないようです。また、自分のコードから「2回のクリックでスクリーンショット」投稿のコードに変更しようとしましたが、コードにそれを実装すると、何らかの理由で他のすべてのコードが台無しになりました。

現時点では、スクリーン ショットは Win XP で完全に表示されます。ただし、Vista と Win7 では、ゲームがウィンドウ モードでプレイされない限り、空白で表示されます。これは私たちのプログラムを完成させるための最後のステップであり、この問題を解決しないと終了できないため、誰かが私たちを助けてくれることを願っています.

スクリーン ショットに使用している C# コードは以下のとおりです。

Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                  Screen.PrimaryScreen.Bounds.Height,
                                  PixelFormat.Format32bppArgb);
Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot);
gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
                             Screen.PrimaryScreen.Bounds.Y,
                             0, 0,
                             Screen.PrimaryScreen.Bounds.Size,
                             CopyPixelOperation.SourceCopy);
4

2 に答える 2

4

ハードウェア アクセラレーション サーフェスの通常の画面バッファを使用してスクリーンショットを撮ろうとしていると思います。あなたの Windows XP の結果はおそらくまぐれです: ユニークな、または最適ではないビデオ構成 (ビデオのスクリーンショットを撮ろうとすると、同じ結果が得られる可能性があります - ビデオ カードが挿入される大きな黒、茶色、またはピンクの長方形)高速化されたフレーム バッファー)。

システム全体の設定であるシステム ビデオ アクセラレーション (すべてがソフトウェア スクリーン バッファにレンダリングされる互換モード) を下げるか、使用しているグラフィックス API (DirectX、OpenGL) と直接連携するようにスクリーンショット コードを変更する必要があります。 ) - そのためのコードは、レンダリングに使用している API/メソッドに完全に依存しています。

于 2009-09-17T14:34:31.263 に答える
-2

上記の回答は、「使用しているグラフィックス API (DirectX、OpenGL) と直接連携するようにスクリーンショット コードを変更してください」という引用以外は完全に間違っています。

それは修正ですが、難しいです。

あなたの問題は、ゲームが vista と win7 で別のサーフェスにレンダリングされるという事実です。

グラフィック (DirectX、OpenGL) をフックするか、DWM スクリーン キャプチャを試す必要があります。

XPの「2回のクリックでスクリーンショット」には、約2000回のクリックと、答えを探すのに数え切れないほどの時間がかかりました。十分に文書化されていません(少なくとも純粋な.netソリューションはそうではありません)

于 2010-01-05T19:41:56.640 に答える