使用DirectX截屏

来源:互联网 发布:丝丝缠绵 白白知 小说 编辑:程序博客网 时间:2024/05/18 02:11

原文链接:http://blog.163.com/charlie-lei@126/blog/static/113743924201051310238139/

Directx截图黑屏的原因分析可以参考:http://www.cnblogs.com/graphics/archive/2012/04/03/2117798.html


// 以下代码没有错误处理,请在实际使用中增加适当的错误处理。
//

#include "stdafx.h"#include <d3d9.h>#include <d3dx9.h>#pragma comment( lib, "d3d9.lib" )#pragma comment( lib, "d3dx9.lib" )int Capture(){LPDIRECT3D9 g_pD3D = NULL;D3DDISPLAYMODE ddm; D3DPRESENT_PARAMETERS d3dpp;IDirect3DDevice9 * g_pd3dDevice;IDirect3DSurface9 * pSurface;ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS)); ZeroMemory( &d3dpp, sizeof(d3dpp) );g_pD3D=Direct3DCreate9(D3D_SDK_VERSION);g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&ddm);d3dpp.Windowed=TRUE; d3dpp.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; d3dpp.BackBufferFormat=ddm.Format; d3dpp.BackBufferHeight=ddm.Height; d3dpp.BackBufferWidth=ddm.Width; d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE; d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow=GetDesktopWindow(); d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT; d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;HRESULT hr = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,GetDesktopWindow(),D3DCREATE_SOFTWARE_VERTEXPROCESSING ,&d3dpp,&g_pd3dDevice);hr = g_pd3dDevice->CreateOffscreenPlainSurface(ddm.Width, ddm.Height, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pSurface, NULL);hr = g_pd3dDevice->GetFrontBufferData(0, pSurface);//---以下指令可以把‘表面’保存成内存数据LPD3DXBUFFER bufferedImage = NULL;hr = D3DXSaveSurfaceToFileInMemory( &bufferedImage, D3DXIFF_PNG,pSurface,NULL,NULL);bufferedImage->Release();//---以下指令可以把‘表面’保存成指定格式的文件(如果需要其它格式,请参考 MSDN)hr = D3DXSaveSurfaceToFile("d:/1.png", D3DXIFF_PNG,pSurface,NULL,NULL);//s保存为png格式pSurface->Release(); g_pd3dDevice->Release ();g_pD3D->Release ();return 0;}int _tmain(int argc, _TCHAR* argv[]){CoInitialize( NULL );Capture();CoUninitialize();return 0;}


原创粉丝点击