Graphics.CopyFromScreen返回黑屏

时间:2009-05-17 21:39:25

标签: c# .net screenshot

我有一个小应用程序,可以截取屏幕截图并将其保存到其中的文件夹中。它在大多数情况下工作正常,但在某些情况下,例如在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);

3 个答案:

答案 0 :(得分:2)

Windows屏幕截图功能不会从DirectX表面复制数据。您必须像描述in this article一样手动执行此操作。

答案 1 :(得分:1)

据我所知,这是因为您的图形卡覆盖了这些类型的图形。这也是为什么你可能无法抓住显示视频的屏幕位的原因。

控制面板 - >显示属性 - >设置 - >高级 - >故障排除

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

我知道为了从视频中截取屏幕截图,我必须这样做,希望这对你的opengl有用。

答案 2 :(得分:0)

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

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