如何得到窗口中的图象数据?我只是想得到其位图格式的数据段的数据,有什么好的函数吗?

解决方案 »

  1.   


    //屏幕2位图
    HBITMAP CopyScreenToBitmap(LPRECT lpRect)
     //lpRect 代表选定区域
    {
    HDC       hScrDC, hMemDC;      
     // 屏幕和内存设备描述表
    HBITMAP    hBitmap, hOldBitmap;   
     // 位图句柄
    int       nX, nY, nX2, nY2;      
    // 选定区域坐标
    int       nWidth, nHeight;      
    // 位图宽度和高度
    int       xScrn, yScrn;         
    // 屏幕分辨率   // 确保选定区域不为空矩形
       if (IsRectEmpty(lpRect))
         return NULL;
       //为屏幕创建设备描述表
       hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
       //为屏幕设备描述表创建兼容的内存设备描述表
       hMemDC = CreateCompatibleDC(hScrDC);
       // 获得选定区域坐标
       nX = lpRect- >left;
       nY = lpRect- >top;
       nX2 = lpRect- >right;
       nY2 = lpRect- >bottom;
       // 获得屏幕分辨率
       xScrn = GetDeviceCaps(hScrDC, HORZRES);
       yScrn = GetDeviceCaps(hScrDC, VERTRES);
       //确保选定区域是可见的
       if (nX 〈0)
          nX = 0;
       if (nY 〈  0)
          nY = 0;
       if (nX2 > xScrn)
          nX2 = xScrn;
       if (nY2 > yScrn)
          nY2 = yScrn;
       nWidth = nX2 - nX;
       nHeight = nY2 - nY;
       // 创建一个与屏幕设备描述表兼容的位图
    hBitmap = CreateCompatibleBitmap
     (hScrDC, nWidth, nHeight);
       // 把新位图选到内存设备描述表中
       hOldBitmap = SelectObject(hMemDC, hBitmap);
       // 把屏幕设备描述表拷贝到内存设备描述表中
    BitBlt(hMemDC, 0, 0, nWidth, nHeight,
     hScrDC, nX, nY, SRCCOPY);
       //得到屏幕位图的句柄
       hBitmap = SelectObject(hMemDC, hOldBitmap);
       //清除 
       DeleteDC(hScrDC);
       DeleteDC(hMemDC);
       // 返回位图句柄
       return hBitmap;
    }2: GetBitmapBits()
      

  2.   

    1.创建一个DDB ,用CreateCompatibleBitmap
    2.将DDB选入一个内存DC
    3.将窗口图象copy进来.
    4.用GetBitmapBits()将DDB转化为DIB
    5.得到位图数据
      

  3.   

    要先得到窗口的句柄才行, 用这句话实现:  HBITMAP hbm=m_wnd.GetBitmap()