我用CBitmap,想将本地屏幕信息发送到其他计算机上,并显示。
我的思路是首先取得本地屏幕的位图信息,然后将位图信息转换成BYTE型的数组数据进行发送,对方接收到后,在装入位图中,然后显示。问题是,我用CBitmap的GetBitmapBits()函数将数据装入BYTE型的数组时,参数要求输入要copy的字节数,我查了MSDN,好像要用它父类的GetObject()函数,但是不知道这个函数的参数怎么用,我怎么也得不到那个位图的大小啊!请指教!ps:要想达到我的目的,有没有其他好点的方法呢??

解决方案 »

  1.   

    用File 类,读BMP的File 头信息,该信息中有大小数据, MSDN中查BITMAPINFOHEADER
      

  2.   

    CBitmap bitmap;
    BITMAP bm;
    bitmap.GetBitmap(&bm);
    int nWidth = bm.bmWidth;
    int nHeight = bm.bmHeight;
    int nSize = bm.bmWidthBytes * bm.bmHeight;
      

  3.   

    tufaqing的做法很对 ,不过之前我想要加上导入位图这一步 :CBitmap bitmap;
    BITMAP bm;
    bitmap.LoadBitmap(ID_bitmap);//ID_bitmap 是你 将你要导入的图片载入到MFC中的资源号;
    bitmap.GetBitmap(&bm);
    int nWidth = bm.bmWidth;
    int nHeight = bm.bmHeight;
    int nSize = bm.bmWidthBytes * bm.bmHeight;
      

  4.   

    位图的信息头里有
    typedef struct tagBITMAPINFOHEADER{ // bmih 
        DWORD  biSize; 
        LONG   biWidth; 
        LONG   biHeight; 
        WORD   biPlanes; 
        WORD   biBitCount 
        DWORD  biCompression; 
        DWORD  biSizeImage; 
        LONG   biXPelsPerMeter; 
        LONG   biYPelsPerMeter; 
        DWORD  biClrUsed; 
        DWORD  biClrImportant; 
    } BITMAPINFOHEADER; 
     
      

  5.   

    BITMAP bmInfo;
    m_bitmap.GetObject(sizeof(bmInfo), &bmInfo);
      

  6.   

    楼上的方法应该行得通,
    tufaqing的做法也对,不过:
    nWidth = (bm.bmWidth+3)/4*4这是bmp图的真正宽度,
    还有bmWidthBytes应该根据你的bmp是几位图再由nWidth作一次字节的转换,随便哪本图像书都有介绍
      

  7.   

    楼上说的不错,涉及到字节对齐的问题。
    还有些4位和8位DIB是经过压缩了的。