스폰서 링크
void SaveScreenShot( char* filename, int w, int h )
{
//임시로 사용할 Surface 선언
IDirect3DSurface9* BackBuff;
//시스템 메모리에 정해진 크기의 버퍼를 만듭니다.
//화일로 저장하려면 당연히 시스템 메모리에 이미지가 있어야 되겠죠?
g_pd3dDevice->CreateOffscreenPlainSurface( w, h, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT ,&BackBuff, NULL );
//백버퍼를 얻어옵니다.
HRESULT hr = g_pd3dDevice->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &BackBuff );
//에러 체크
if(hr != D3D_OK)
{
BackBuff->Release();
return;
}
//파일로 저장
//D3DXIFF_BMP는 저장할 이미지 타입입니다.
D3DXSaveSurfaceToFile( filename, D3DXIFF_BMP, BackBuff, NULL, NULL );
//풀어줌
BackBuff->Release();
}
이 함수는 메인루프에서 화면 클리어 하기전이나,
EndScene()이 끝난후 호출 하시면 됩니다.
그리고..
D3DPRESENT_PARAMETERS d3dpp;
d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
이렇게 반드시 설정이 되어 있어야 합니다.
백버퍼의 DC를 얻어와서 저장하는 방법도 있습니다.
일단 DC를 얻어오면 저장하는 방법은 일반적인 방법이 되므로,
자료는 풍부하죠...자신만의 포맷으로 저장도 가능합니다.
HDC hdc;
BackBuffer->GetDC(&hdc);
'DENNY's Code Story' 카테고리의 다른 글
| MinGW (Minimalist GNU for Windows) (0) | 2008/07/18 |
|---|---|
| 네트워크 패킷 캡쳐 프로그램 SmartSniff (0) | 2008/07/18 |
| StarURL 에 대해서... (0) | 2008/07/18 |
| Demux MPEG (0) | 2008/07/18 |
| ISO 14496-3 (Audio) - Advanced Audio Coding (AAC) (0) | 2008/07/18 |
| DirectX 3D 화면 캡쳐 팁 (1) | 2008/07/18 |

