【开源项目】基于Directx屏幕录制
生活随笔
收集整理的這篇文章主要介紹了
【开源项目】基于Directx屏幕录制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include<d3d9.h>
#include<iostream>
#pragma comment(lib,"d3d9.lib")
using namespace std;
//截取全屏
void CaptureScreen(void *data)
{//1 創建directx3d對象static IDirect3D9 *d3d = nullptr;if (!d3d){d3d = Direct3DCreate9(D3D_SDK_VERSION);}if (!d3d)return;//2 創建顯卡設備對象static IDirect3DDevice9 *device = nullptr;if (!device){D3DPRESENT_PARAMETERS pa;ZeroMemory(&pa,sizeof(D3DPRESENT_PARAMETERS));pa.Windowed = true;pa.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;pa.SwapEffect = D3DSWAPEFFECT_DISCARD;pa.hDeviceWindow = GetDesktopWindow();d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, 0,D3DCREATE_HARDWARE_VERTEXPROCESSING, &pa, &device);if (!device)return;}int w = GetSystemMetrics(SM_CXSCREEN);int h = GetSystemMetrics(SM_CYSCREEN);//3 創建離屏表面static IDirect3DSurface9 *sur = nullptr;if (!sur){device->CreateOffscreenPlainSurface(w,h,D3DFMT_A8R8G8B8,//像素格式D3DPOOL_SCRATCH,//存儲位置 &sur,0);}if (!sur)return;//4 截取屏幕device->GetFrontBufferData(0,sur);//5 取出數據D3DLOCKED_RECT rect;ZeroMemory(&rect, sizeof(rect));if (sur->LockRect(&rect, 0, 0) != S_OK){return;}memcpy(data, rect.pBits, w * h * 4);sur->UnlockRect();//解鎖cout << ".";
}int main()
{FILE *fp = fopen("out.rgb", "wb");int size = 1920 * 1080 * 4;char *buffer = new char[size];for (int i = 0; i < 100; i++){CaptureScreen(buffer);fwrite(buffer,1,size,fp);Sleep(100);}return 0;
}
?
?
?
?
?
?
?
?
?
?
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【开源项目】基于Directx屏幕录制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 羊毛绒是什么材质 羊毛绒的解释
- 下一篇: 【WebRTC---源码篇】(一)全局初