2011-08-04 11 views
5

私はOpenGLウィンドウとwxWidgetダイアログを持っています。私はダイアログにOpenGLをミラーリングしたい。だから、私は何をするつもりは次のとおりです。glReadPixelsからwxWidgetsダイアログ/パネルにキャプチャしたスクリーンショットを描画する方法

  1. はwxWidgetsのダイアログ上にそれを表示しopenglの
  2. のスクリーンショットをキャプチャします。

更新:これは私が現在、glReadPixels(私も一時的にBMPファイルに保存するFreeImageを使用しますが、私は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

あなたはどのように呼んでいるglReadPixelsを役に立てば幸い?返されたデータを使ってwxImageを作成し、そこから取得することができます。 – Bart

+0

@Bart:コードを組み込むために投稿を更新しました。返されたデータからwxImageを作成する方法を私に見せていただければ幸いです。 – huy

答えて

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

jpg png bmpとして保存して表示することができます。ダイアログに表示するだけで、ハードディスクに保存する必要はありませんが、もちろん可能です。 ヒープに画像を作成するだけです。 http://docs.wxwidgets.org/stable/wx_wximage.html#wximagector

は、それが

関連する問題