windows桌面抓图

介绍一个使用GetDIBits截图的方法,如下:

//rgb数据
unsigned char *g_sRGBdata = NULL;
//rgb数据大小
int g_nRGBData;
HWND hDesktopWnd;
HDC hDesktopDC;
HDC hCaptureDC;
HBITMAP hCaptureBitmap;
BITMAPINFO bi= {0};
...
// create buf,dc
g_nRGBData = g_nWidth*g_nHeight*4;
g_sRGBdata = (unsigned char *)malloc(g_nRGBData);

hDesktopWnd = ::GetDesktopWindow();   //窗口句柄
hDesktopDC = ::GetDC(hDesktopWnd);    //窗口DC句柄
hCaptureDC = ::CreateCompatibleDC(hDesktopDC); //兼容DC句柄
hCaptureBitmap = CreateCompatibleBitmap(hDesktopDC,
g_nWidth, g_nHeight);  //兼容位图句柄,宽高可自设
SelectObject(hCaptureDC, hCaptureBitmap);
//获取桌面位图的信息
 bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 int iRst = GetDIBits( hCaptureDC, hCaptureBitmap, 0, 0,
NULL, &bi, DIB_RGB_COLORS);  // 获取位图信息到bi,也可直接赋值

//开始抓图
while(!g_bExit)
{
   memset(g_sRGBdata,0,g_nRGBData);   //sRGB_data用来保存RGB数据
   bi.bmiHeader.biHeight = g_nHeight;
   BOOL bRet = BitBlt( hCaptureDC,0,0,bi.bmiHeader.biWidth,
bi.bmiHeader.biHeight, hDesktopDC, 0, 0, SRCCOPY|CAPTUREBLT); //复制位图
   bi.bmiHeader.biHeight = -g_nHeight;  // 没有录像会是倒的。
   int  iRet = GetDIBits( hCaptureDC, hCaptureBitmap, 0, g_nHeight,
 g_sRGBdata,&bi, DIB_RGB_COLORS); //抓到的数据就存在g_sRGBdata
   ...//处理数据。
   Sleep(40);
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山西茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值