태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

스폰서 링크
아래는 D3D 백버퍼를 이용해서 스크린샷을 저장하는 코드입니다.

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
Posted by cncdenny