C# Graphics.CopyFromScreen返回黑屏
我有一个小应用程序,它可以拍摄屏幕截图并将其保存到它的文件夹中。它在大多数情况下工作正常,但在某些情况下,例如在TeamFortress 2中或在OpenGL模式下运行魔兽争霸3时,它只返回一个完全黑色(或白色)的图像。有人有办法解决这个问题吗 我使用的是c#标准:C# Graphics.CopyFromScreen返回黑屏,c#,.net,screenshot,C#,.net,Screenshot,我有一个小应用程序,它可以拍摄屏幕截图并将其保存到它的文件夹中。它在大多数情况下工作正常,但在某些情况下,例如在TeamFortress 2中或在OpenGL模式下运行魔兽争霸3时,它只返回一个完全黑色(或白色)的图像。有人有办法解决这个问题吗 我使用的是c#标准: Bitmap bmp; Graphics gfx; bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Pi
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);
您假设屏幕为
PixelFormat.Format32bppArgb
这种情况可能并不总是如此,尽管我不知道这是否与其他答案相关
如果相关,您可以尝试
Screen.PrimaryScreen.BitsPerPixel
获取屏幕的深度。我没有尝试过,所以我不知道它是否有效。您假设屏幕为像素格式。Format32bppArgb
可能并不总是这样,尽管我不知道这是否与其他答案相关
如果相关,您可以尝试
Screen.PrimaryScreen.BitsPerPixel
获取屏幕的深度。我还没有试过,所以我不知道它是否有效。我理解这是因为这些类型的图形被您的图形卡覆盖了。这也是为什么你可能无法抓取屏幕上显示视频的部分
控制面板-->显示属性-->设置-->高级-->疑难解答
我认为有一个选项可以减少硬件加速,这应该可以让你抓住它们
我知道我必须这样做是为了从视频中抓取屏幕截图,希望这对你的opengl有帮助。我理解这是因为这些类型的图形被你的图形卡覆盖了。这也是为什么你可能无法抓取屏幕上显示视频的部分 控制面板-->显示属性-->设置-->高级-->疑难解答 我认为有一个选项可以减少硬件加速,这应该可以让你抓住它们
我知道我必须这样做是为了从视频中抓取屏幕截图,希望这对opengl有帮助。Windows屏幕截图功能不会从DirectX表面复制数据。您必须按照所述手动执行此操作。Windows屏幕截图功能不会从DirectX曲面复制数据。你必须像上面描述的那样手动操作。OP提到他在OpenGL中运行。OP提到他在OpenGL中运行。但是,在标准模式下运行魔兽争霸3时,屏幕截图被完美捕捉。我假设它是DirectX。但是,在标准模式下运行魔兽争霸3时,屏幕截图被完美捕捉。我猜是DirectX。