【问题标题】:Graphics.CopyFromScreen returns black screenGraphics.CopyFromScreen 返回黑屏
【发布时间】:2009-05-17 21:39:25
【问题描述】:

我有一个小应用程序,它可以截取屏幕截图并将它们保存到它所在的文件夹中。它在大多数情况下都可以正常工作,但在某些情况下,例如在 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》时,屏幕截图可以完美捕捉。我假设是 DirectX。

标签: c# .net screenshot


【解决方案1】:

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

【讨论】:

  • OP 提到他在 OpenGL 中运行。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    如果相关,您可以尝试Screen.PrimaryScreen.BitsPerPixel 来获取屏幕的深度。没试过,不知道行不行。

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 2020-06-14
      • 2021-05-18
      • 2013-09-24
      • 2021-07-31
      • 2019-05-12
      • 2019-10-01
      • 2014-01-06
      • 1970-01-01
      相关资源
      最近更新 更多