2012-03-19 18 views
-1
OpenGLWindow(); 
opl = new OpenGLWindow(); 
opl.Parent = panel1; 
opl.Dock = DockStyle.Fill; 
opl.Refresh(); 

ここのコードです。私はpanel1の写真を撮ることができますが、私はopenGLの写真を撮ることはできません。質問です:どのように私は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"); 
} 
+2

C#は**ではありません** C++またはC – Oded

+0

このコードは実際にはC#、C++、およびCですか?純粋なC#のように見えます。 –

+0

はい、このコードはC#でOpenGLを使用しています。 –

答えて

1

を取ることができ、私はあるOpenGLWindow誰正確に知りませんが、私はあなたには、いくつかのフレームワーク、OpenGLのAPIの上にいくつかのC#ラッパーを使用すると仮定します。そうであれば、OpenGLはGDIにアクセスできないビデオメモリに直接レンダリングすることが多いでしょうが、おそらく空のイメージが表示されます。

OpenGLでレンダリングされたイメージを実際に取得するには、glReadPixelsを呼び出す必要があります。あなたのフレームワークは、このglReadPixels上でラッパーメソッドを公開しているかもしれません。あるいは、適切なパラメーターを使ってpinvoke経由でglReadPixelsを直接呼び出せ、必要なイメージを取得することができます。(逆さまになり、赤と青のチャンネルが逆です。バイト配列を操作することによってこれらの問題を解決することができます)。

+0

OpenGLWindowは私のOpenGLクラスです。 OpenGLWindowですべてのOpenGLコントロールを書きました。その後、私は形式で使用しました。 –

+0

これは、OpenGL APIにアクセスできることを意味し、単にglReadPixelsを呼び出すことができます:) –

関連する問題