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 回答