Снимок экрана приложения MDI с графикой OpenGL с использованием MFC - PullRequest
0 голосов
/ 23 апреля 2010

В нашем приложении MDI, которое написано на MFC, у нас есть функция сохранения скриншота клиентской области MDI в файл.В настоящее время мы делаем BitBlt с экрана в растровое изображение, которое затем сохраняется.Проблема заключается в том, что некоторые из дочерних окон MDI имеют свое содержимое, отображаемое OpenGL, и в целевом растровом изображении эти области отображаются пустыми или искаженными.

Я рассмотрел несколько альтернатив:
- Извлеките содержимое OpenGL напрямую (используя glReadPixels) и перетяните его в соответствующие части битовой карты экрана.
- Имитируйте ALT + PrtScr, посколькуэто вручную, кажется, получает контент просто отлично.Однако это приведет к удалению содержимого буфера обмена.
- Попробуйте работать с DWM.Appart от Vista и Win7, это также должно работать на Win2000 и XP, так что это, вероятно, не тот путь.

Любой вклад будет оценен!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2010

Используйте подход glReadPixels (). Этот вопрос задают довольно часто здесь, на форумах gamedev.net и в других местах, поэтому google должен легко показывать вам примеры кода, но обычно рекомендуется подход glReadPixels ().

Имитация нажатия клавиш - это путь к катастрофе, я бы держался от этого подальше.

0 голосов
/ 23 апреля 2010

Лучший способ получить растровое изображение из окна OpenGL - нарисовать содержимое в растровом окне. См. PFD_DRAW_TO_BITMAP для получения дополнительной информации о том, как это сделать.

Если вы хотите пойти по пути Alt + PrtScr, вы должны учитывать, что у многих пользователей установлен собственный инструмент для печати экрана, который реагирует на ту же самую горячую клавишу. Поэтому вы не можете быть уверены, что эта горячая клавиша скопирует содержимое в буфер обмена. Он может просто открыть окно установленной утилиты / утилиты для экрана печати. ​​

...