win32 截屏 获取 数据

代码如下:

 
HDC hDeskTop = GetDC(GetDesktopWindow());
 int BitPerPixel = GetDeviceCaps(hDeskTop, BITSPIXEL);
 int Width = GetDeviceCaps(hDeskTop, HORZRES);
 int Height = GetDeviceCaps(hDeskTop, VERTRES);
 BitPerPixel = 24;
 HDC hTemp = CreateCompatibleDC(hDeskTop);
 HBITMAP memBitmap, oldmemBitmap;
 memBitmap = CreateCompatibleBitmap(hDeskTop, Width, Height);
 oldmemBitmap = (HBITMAP)SelectObject(hTemp, memBitmap);
 if(oldmemBitmap == NULL) return;
 BitBlt(hTemp, 0, 0, Width, Height, hDeskTop, 0, 0, SRCCOPY);
 FILE *fp = fopen("desk.bmp", "w+b");
 BITMAPINFOHEADER bih = {0};
 bih.biBitCount = BitPerPixel;
 bih.biCompression = BI_RGB;
 bih.biHeight = Height;
 bih.biPlanes = 1;
 bih.biSize = sizeof(BITMAPINFOHEADER);
 bih.biSizeImage = 3 * Width * Height;
 bih.biWidth = Width;
 BITMAPFILEHEADER bfh = {0};
 bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
 bfh.bfSize = bfh.bfOffBits + 3 * Width * Height;
 bfh.bfType = (WORD)0x4d42;
 fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);
 fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);
 unsigned char * p = new unsigned char[Width * Height * 3];
 GetDIBits(hTemp, memBitmap,
  0,
  Height,
  p,
  (LPBITMAPINFO) &bih,
  DIB_RGB_COLORS);
 fwrite(p, 1, Width * Height * 3, fp);
 delete [] p;
 fclose(fp);
 SelectObject(hTemp, oldmemBitmap);
 DeleteDC(hTemp);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值