我无法从opengl屏幕拍摄图像

时间:2012-03-19 13:43:20

标签: c# opengl

OpenGLWindow(); 
opl = new OpenGLWindow();
opl.Parent = panel1;
opl.Dock = DockStyle.Fill;
opl.Refresh();

这里的代码。我可以拍摄panel1的照片,但我不能拍摄openGL图片。问题是:我如何获取OpenGL截图

var frm = Panel1;
using (var bmp = new Bitmap(frm.Width, frm.Height))
{
    frm.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
    bmp.Save(@"c:\screenshot.Jpeg");
}

1 个答案:

答案 0 :(得分:1)

我不确切知道OpenGLWindow是谁,但我假设您使用一些框架,一些C#包装器通过OpenGL API。如果是这种情况,很可能OpenGL直接渲染到GDI无法访问的视频内存,这就是为什么你可能得到一个空图像。

要实际获取OpenGL渲染的图像,您需要调用glReadPixels。您的框架可能会通过此glReadPixels向您展示一个包装器方法,或者我相信您可以通过pinvoke直接调用glReadPixels,并使用适当的参数获取您想要的图像(它可能是颠倒的并且反转了红色和蓝色通道,但是您将能够通过操作字节数组来解决这些问题。