回 帖 发 新 帖 刷新版面

主题:[讨论]截屏函数BitBlt的用法

The BitBlt function performs a bit-block transfer of the color data corresponding to a rectangle of pixels from the specified source device context into a destination device context. 

BOOL BitBlt(
  HDC hdcDest, // handle to destination DC
  int nXDest,  // x-coord of destination upper-left corner
  int nYDest,  // y-coord of destination upper-left corner
  int nWidth,  // width of destination rectangle
  int nHeight, // height of destination rectangle
  HDC hdcSrc,  // handle to source DC
  int nXSrc,   // x-coordinate of source upper-left corner
  int nYSrc,   // y-coordinate of source upper-left corner
  DWORD dwRop  // raster operation code
);

上面的截屏函数BitBlt把屏幕上得到的图像数据放在哪里呀 ??

回复列表 (共4个回复)

沙发

如果你要截取屏幕:

//
HDC hdcDest, // handle to destination DC
是要存入的目标DC,为内存设备,或另一个屏幕设备(多显示情况),或打印机设备;
一般为内存设备描述表 &memDC

//
HDC hdcSrc,  // handle to source DC
屏幕设备描述表       &SrcDC

这个函数可以进行任意两个有效设备描述表的位块传送

板凳


HBITMAP CMyQQDlg::CopyScreenToBitmap()
{
    CRect rect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
    HDC hScrDC,hMemDC;    // 屏幕和内存设备描述表
    HBITMAP hBitmap, hOldBitmap;// 位图句柄
    int xScrn, yScrn;    // 屏幕分辨率
    hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);    //为屏幕创建设备描述表
    hMemDC = CreateCompatibleDC(hScrDC);//为屏幕设备描述表创建兼容的内存设备描述表
    xScrn = GetDeviceCaps(hScrDC, HORZRES);// 获得屏幕分辨率
    yScrn = GetDeviceCaps(hScrDC, VERTRES);
    hBitmap = CreateCompatibleBitmap(hScrDC, rect.Width(), rect.Height());// 创建一个与屏幕设备描述表兼容的位图
    hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap);// 把新位图选到内存设备描述表中
    BitBlt(hMemDC, 0, 0, rect.Width(), rect.Height(),hScrDC,rect.left,rect.top, SRCCOPY);// 把屏幕设备描述表拷贝到内存设备描述表中
    hBitmap =(HBITMAP)SelectObject(hMemDC, hOldBitmap);//得到屏幕位图的句柄
    DeleteDC(hScrDC);//清除 
    DeleteDC(hMemDC);
    return hBitmap;// 返回位图句柄
}
这样写有问题吗?为什么得到的bmp图像没有数据

3 楼

传两个地址进去试试
BitBlt(&hMemDC, 0, 0, rect.Width(), rect.Height(),&hScrDC,rect.left,rect.top, SRCCOPY);

4 楼


error C2664: 'BitBlt' : cannot convert parameter 6 from 'struct HDC__ ** ' to 'struct HDC__ *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

我来回复

您尚未登录,请登录后再回复。点此登录或注册