0

我有一个小应用程序,它拍摄屏幕截图并将它们保存到它所在的文件夹中。它大部分时间都可以正常工作,但在某些情况下,例如在 Team Fortress 2 中或在 OpenGL 模式下运行魔兽争霸 3 时,它只会返回一个完全黑色(或白色)的图像。有没有人有办法解决这个问题?

我正在使用 c# 标准:

Bitmap bmp;
Graphics gfx;
bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
gfx = Graphics.FromImage(bmpScreenshot);
gfx.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
bmpScreenshot.Save("image.jpg", ImageFormat.Jpeg);
4

3 回答 3

2

Windows 屏幕截图功能不会从 DirectX 表面复制数据。您必须像本文中描述的那样手动执行此操作。

于 2009-05-17T21:47:14.797 回答
1

我理解这是因为您的显卡覆盖了这些类型的图形。这也是为什么您可能也无法抓取显示视频的屏幕片段的原因。

控制面板 --> 显示属性 --> 设置 --> 高级 --> 疑难解答

我认为那里有一个选项可以减少硬件加速,这应该可以让你抓住它们。

我知道我必须这样做才能从视频中抓取屏幕截图,希望这对您的 opengl 内容有所帮助。

于 2009-05-17T21:46:39.353 回答
0

您假设屏幕PixelFormat.Format32bppArgb可能并非总是如此,但我不知道这是否与其他答案相关。

如果相关,您可以尝试Screen.PrimaryScreen.BitsPerPixel获取屏幕的深度。我没有尝试过,所以我不知道它是否有效。

于 2009-05-17T21:45:05.037 回答