使用DirectX截屏
来源:互联网 发布:linux桌面启动器 编辑:程序博客网 时间:2024/06/09 01:34
//奇慢无比
//DXScreenCaputre.h#pragma once#include <d3d9.h>#include <D3dx9tex.h>#pragma comment(lib, "D3D9.lib")#pragma comment(lib, "D3dx9.lib")class CDXScreenCaputre{protected: LPDIRECT3D9 g_pD3D; LPDIRECT3DDEVICE9 g_pd3dDevice; LPDIRECT3DSURFACE9 g_pD3DSurface;public: CDXScreenCaputre() { g_pD3D = NULL; g_pd3dDevice = NULL; g_pD3DSurface = NULL; } ~CDXScreenCaputre() { if(g_pD3DSurface) { g_pD3DSurface->Release(); g_pD3DSurface = NULL; } if(g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } if(g_pD3D) { g_pD3D->Release(); g_pD3D = NULL; } } BOOL InitD3D(HWND hWnd) { BOOL bRet = FALSE; do { HRESULT hr; //creating a Direct3D9 object g_pD3D = Direct3DCreate9(D3D_SDK_VERSION); if(g_pD3D == NULL) { bRet = -1; break; } //Creates a device to represent the display adapter. D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp,sizeof(d3dpp)); d3dpp.Windowed=true; d3dpp.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow=hWnd; hr = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice); if(hr != D3D_OK || g_pd3dDevice== NULL) { bRet = -2; break; } //Retrieves the display mode D3DDISPLAYMODE ddm ={0}; hr = g_pd3dDevice->GetDisplayMode(0, &ddm); if(hr != D3D_OK) { bRet = -3; break; } //Create an off-screen surface. hr = g_pd3dDevice->CreateOffscreenPlainSurface(ddm.Width, ddm.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &g_pD3DSurface, NULL); if(hr != D3D_OK) { bRet = -4; break; } bRet = 1; }while(0); return bRet; } BOOL Capture(LPCTSTR szFileName) { HRESULT hr = D3D_OK; do { if(!(g_pd3dDevice && g_pD3DSurface)) { hr = S_FALSE; break; } //copy fornt buffer data hr = g_pd3dDevice->GetFrontBufferData(0, g_pD3DSurface); if(hr != D3D_OK) { break; } if(szFileName) { hr = D3DXSaveSurfaceToFile(szFileName, D3DXIFF_BMP, g_pD3DSurface, NULL, NULL); } }while(0); return hr == D3D_OK; }};
//测试代码 CDXScreenCaputre m_dxSCap; if(m_dxSCap.InitD3D(m_hWnd) > 0) { DWORD dwTick = GetTickCount(); int iMaxframe = 100; for(int i=0; i<iMaxframe; i++) { m_dxSCap.Capture(NULL); //m_dxSCap.Capture(_T("C:\\TEMP\\tt.bmp")); } dwTick = GetTickCount() - dwTick; TRACE(_T("Average consume tick %ums for %d frames\n"), dwTick, iMaxframe); }
0 0
- 使用DirectX截屏
- 使用DirectX截屏
- 使用DirectX截屏
- 使用DirectX截屏
- 使用directx绘制三角形
- 学习使用DirectX
- C# DirectX 使用例子
- directx 使用环境配置
- C#中使用DirectX编程
- C#中使用DirectX编程
- C#中使用DirectX编程
- C#中使用DirectX编程
- DirectX 中灯光的使用
- DirectX 中的COM 使用技术
- 在Delphi中使用DirectX
- 使用DirectX 优化声音特性
- 在BCB中使用DirectX
- 使用DirectX来渲染位图
- HDU 5889 Barricade (单源最短路 + 最小割(最大流))
- Windows-SSD配置与测试
- 序列求和
- android用memtester内存压力测试
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- 使用DirectX截屏
- Webview
- 实现微信发送位置效果
- ASP.NET(C#)实现一次性动态上传多张图片的代码(多个文件)
- MySql将一个数据库中的表导入到另一个数据库中的表
- TCP与UDP特性与区别
- Linux svn使用方法杂记(持续更新...)
- Scala之类型参数化:Type Parameterization
- Qt tableWidget item 元素居中的代码设置