Я не могу взять изображение с экрана OpenGL - PullRequest
0 голосов
/ 19 марта 2012
OpenGLWindow(); 
opl = new OpenGLWindow();
opl.Parent = panel1;
opl.Dock = DockStyle.Fill;
opl.Refresh();

здесь код. Я могу сделать снимок панели 1, но не могу сделать снимок 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 Ответ

1 голос
/ 19 марта 2012

Я точно не знаю, кто такой OpenGLWindow, но я предполагаю, что вы используете какую-то инфраструктуру, какую-то оболочку C # поверх OpenGL API.Если это так, то, скорее всего, OpenGL рендерится непосредственно в видеопамять, которая недоступна для GDI, поэтому вы, вероятно, получаете пустое изображение.

Чтобы фактически получить изображение, отрисованное OpenGL, вам нужновызов glReadPixels .Ваш фреймворк может предоставить вам метод-обертку над этим glReadPixels, или я полагаю, что вы можете напрямую вызывать glReadPixels через pinvoke с соответствующими параметрами и получать желаемое изображение (оно может быть перевернуто, а красный и синий каналы инвертированы, носможет исправить эти проблемы, манипулируя байтовым массивом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...