DIRECTX 9 SDK里面有没有屏幕抓图的例子?如果没有哪里可以找到?

解决方案 »

  1.   

    http://bbs.csdn.net/topics/60461454
    以前有人问过
      

  2.   

    1,Getbackbuffer(...)
    2,CreateSurface (d3dpool_system)
    3,StretchRect backbuffer -> ysytembuffer
    4,D3DXSaveSurfaceToFile
      

  3.   

    void CrD3DWndCL::RenderToFileM( const CString &fileName, CString *pOrgFileName, BOOL bClear, D3DXIMAGE_FILEFORMAT format )
    {
       IDirect3DSurface9 *pOldSurface = NULL;
       IDirect3DSurface9 *pSurfOldDepthStencil = NULL;
       IDirect3DSurface9 *pNewSurface = NULL;
       IDirect3DDevice9  *pd3dDevice = graphicsM.GetDeviceCOM();
       IDirect3DTexture9 *pTex  = NULL;
       HRESULT  hr;   
       ASSERT( pd3dDevice != NULL );   if( pOrgFileName == NULL )
       {
          CRect wndRc;
          GetClientRect( &wndRc );
          hr = pd3dDevice->CreateTexture( wndRc.Width(), wndRc.Height(), 1,
                                                   D3DUSAGE_RENDERTARGET,
                                                   D3DFMT_A8R8G8B8,
                                                   D3DPOOL_DEFAULT, &pTex, NULL );
          if( FAILED( hr ) )
          {
             TRACE( "创建纹理失败!\n" );
             return;
          }
       }
       else
       {
          CString orgFile( *pOrgFileName );
          hr = D3DXCreateTextureFromFileEx( pd3dDevice, orgFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_FROM_FILE,
             D3DUSAGE_RENDERTARGET,D3DFMT_UNKNOWN, D3DPOOL_DEFAULT,D3DX_FILTER_LINEAR, D3DX_FILTER_LINEAR, 0,0,0, &pTex);
          if( FAILED( hr ) )
          {
             TRACE( "加载纹理图片(%s)失败!\n", orgFile );
             return;
          }
       }
       ASSERT( pTex != NULL );
       pTex->GetSurfaceLevel( 0, &pNewSurface );
       ASSERT( pNewSurface != NULL );   setLightM( );
       if( SUCCEEDED( pd3dDevice->BeginScene() ) )
       {
          pd3dDevice->GetRenderTarget( 0, &pOldSurface ); 
          pd3dDevice->GetDepthStencilSurface( &pSurfOldDepthStencil );        pd3dDevice->SetRenderTarget( 0, pNewSurface );
          DWORD flags = D3DCLEAR_ZBUFFER;
          if( bClear )
          {
             flags |= D3DCLEAR_TARGET;
          }
          pd3dDevice->Clear( 0, NULL, flags, bgClrM, 1.0f, 0 );
          pd3dDevice->SetRenderState(  D3DRS_ZENABLE, D3DZB_TRUE );      if( pWndMgrM != NULL )
          {
             pWndMgrM->OnRenderM();
          }      pd3dDevice->SetRenderState(  D3DRS_ZENABLE, D3DZB_FALSE );      renderTextM();
          pNewSurface->Release();      D3DXSaveTextureToFile( fileName, format, pTex, NULL ); 
          pd3dDevice->SetDepthStencilSurface( pSurfOldDepthStencil );      pd3dDevice->SetRenderTarget( 0, pOldSurface );      pd3dDevice->EndScene();
       }
       pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );   pTex->Release();
    }
      

  4.   

    自己写个filter,抓取里面的帧就可以了