Как нарисовать скриншот, снятый с glReadPixels, в диалоговое окно / панель wxWidgets - PullRequest
5 голосов
/ 04 августа 2011

У меня есть окно OpenGL и диалоговое окно wxWidget. Я хочу отразить OpenGL в диалоге. Итак, что я собираюсь сделать, это:

  1. Сделайте снимок экрана opengl
  2. Отобразите его в диалоговом окне wxwidgets.

Есть идеи?

Обновление: так я сейчас использую glReadPixels (я также временно использую FreeImage для сохранения в файл BMP, но я ожидаю, что сохранение файла будет удалено, если есть способ направить его напрямую в wxImage)

// Make the BYTE array, factor of 3 because it's RBG.
BYTE* pixels = new BYTE[ 3 * width * height];

glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels);

// Convert to FreeImage format & save to file
FIBITMAP* image = FreeImage_ConvertFromRawBits(pixels, width, height, 3 * width, 24, 0x0000FF, 0xFF0000, 0x00FF00, false);
FreeImage_Save(FIF_BMP, image, "C:/test.bmp", 0);

// Free memory
delete image;
delete pixels;

1 Ответ

1 голос
/ 07 августа 2011
  // Add Image Support for all types
  wxInitAllImageHandlers();  

  BYTE* pixels = new BYTE[ 3 * width * height];
  glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels);

  // width height pixels alpha
  wxImage img(with, height, pixels, NULL); // I am not sure if NULL is permitted on the alpha channel, but you can test that yourself :).  

 // Second method:
 wxImage img(width, heiht, true);
 img.SetData(pixels);

Теперь вы можете использовать изображение для отображения, сохраняя как JPG PNG BMP, что вам нравится.Для отображения в диалоговом окне вам не нужно сохранять его на жестком диске, но, конечно, вы можете.Просто создайте изображение в куче.http://docs.wxwidgets.org/stable/wx_wximage.html#wximagector

Надеюсь, это поможет

...