Graphics.CopyFromScreen返回黑屏

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

Windows屏幕截图function不会从DirectX表面复制数据。 您必须像本文中所述手动执行此操作。

我理解这是因为你的显卡覆盖了那些类型的图形。 这也是为什么你可能无法抓住显示video的屏幕位的原因。

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

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

我知道我必须这样做才能从video中截取屏幕截图,希望这对你的opengl有用。

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

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