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

여기 코드를 입력하십시오. panel1 사진을 찍을 수는 있지만 openGL 사진을 찍을 수는 없습니다. 나는이 OpenGLWindow 정확히 누구인지하지 않는 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

예,이 코드는 OpenGL을 사용하는 C#입니다. –

답변

1

을 할 수있는 방법,하지만 난 당신이 어떤 프레임 워크는 OpenGL API를 통해 일부 C#을 래퍼를 사용하는 가정 문제이다. 그렇다면 OpenGL은 GDI에 액세스 할 수없는 비디오 메모리로 직접 렌더링됩니다. 왜 빈 이미지를 얻게 될까요?

실제로 OpenGL에서 렌더링 한 이미지를 얻으려면 glReadPixels을 호출해야합니다. 프레임 워크는이 glReadPixels에 대한 래퍼 메서드를 노출 할 수 있습니다. 또는 pinvoke를 통해 적절한 매개 변수를 사용하여 glReadPixels을 직접 호출하고 원하는 이미지를 얻을 수 있다고 생각합니다 (역순으로 표시 될 수 있으며 빨간색과 파란색 채널이 반전되지만 바이트 배열을 조작하여 이러한 문제를 해결할 수 있습니다.

+0

OpenGLWindow는 내 OpenGL 클래스입니다. OpenGLWindow에서 모든 OpenGL 컨트롤을 작성했습니다. 그 후 나는 형식으로 사용했다. –

+0

좋아, 그러면 OpenGL API에 액세스 할 수 있고 glReadPixels를 호출 할 수 있다는 것을 의미합니다. :) –

관련 문제