5

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;
4

1 に答える 1

1
  // 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);

これで、画像を表示に使用して、好きなようにjpgpngbmpとして保存できます。ダイアログに表示するだけの場合は、ハードディスクに保存する必要はありませんが、もちろんできます。次に、ヒープ上にイメージを作成します。 http://docs.wxwidgets.org/stable/wx_wximage.html#wximagector

それが役に立てば幸い

于 2011-08-06T21:53:15.593 に答える