int n= bm.SetBitmapBits(176*144*4,&buf[54]);我在网上搜了很多,,都没看明白,主要是其参数,第二个参数就是指向字节类型数组的指针。但我不知道这个数组包不包含bmp图的两个结构,如果不包含的话,我就应该取buf[54],我的buf是带了两个结构的头文件信息的,还有就是第一个参数要不要乘4,我的buf中每个点都是4个char表示的,谢谢

解决方案 »

  1.   

    第二个参数应该是bmp结构中实际位图的起始指针。
      

  2.   

    MSDN上的,你参考下:
    LONG SetBitmapBits(
      HBITMAP hbmp,
      DWORD cBytes,
      CONST VOID *lpBits
    );
    Parameters
    hbmp 
    [in] Handle to the bitmap to be set. 
    This must be a compatible bitmap. cBytes 
    [in] Specifies the number of bytes pointed to by the lpBits parameter. 
    lpBits 
    [in] Pointer to an array of bytes that contain color data for the specified bitmap. 
      

  3.   

    如果你的bm是HBITMAP,那么第一个参数应该被默认是bm而隐藏了
      

  4.   

    晕,这个程序时你自己写的么,我只能说你的
    int n= bm.SetBitmapBits(176*144*4,&buf[54]);
    可以改为
    int n= bm.SetBitmapBits(176*144*4,buf);
    你在看看,你的程序有多少行
      

  5.   

    不多,里面大多数是调用海康的函数,,我的buf包括了2个结构体,bmp文件有两结构体,就是信息头文件,其大小有54字节Static*   m_sPicture   =   (CStatic*)GetDlgItem(IDC_STATIC);   
    m_sPicture->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE); 
      
    NET_DVR_Init();
        NET_DVR_SetConnectTime(5000,1);
        long lUserID,m_iPlayhandle;
        NET_DVR_DEVICEINFO DeviceInfo;
        lUserID = NET_DVR_Login("221.10.249.139", 8000, "****", "****", &DeviceInfo);    NET_DVR_CLIENTINFO playstru;
        playstru.lChannel=1;
        playstru.lLinkMode =0x80000000;
        playstru.sMultiCastIP="";
        //playstru.hPlayWnd =0;    m_iPlayhandle = NET_DVR_RealPlay(lUserID, &playstru);
        Sleep(1000);    long hd;
        hd = NET_DVR_GetRealPlayerIndex(m_iPlayhandle);
    unsigned long realSize;
        PlayM4_GetBMP(hd,&buf[0],1024*1024,&realSize); CClientDC* pDC=new CClientDC(this);
    SetStretchBltMode(pDC->GetSafeHdc(), COLORONCOLOR);

    BITMAPINFO* bmInfo=new BITMAPINFO();
    CBitmap bm;
    int n= bm.SetBitmapBits(realSize-54,&buf[54]);
    CStatic * ptc=(CStatic *)GetDlgItem(IDC_STATIC);
    ptc->ModifyStyle(0xF,SS_BITMAP);
    HBITMAP hBmp=(HBITMAP)bm;
    ptc->SetBitmap(hBmp); 
      

  6.   

    开始我也直接取buf[0]试过,,也不行
      

  7.   

    我把代码整理了一下,NET_DVR_Init();
        NET_DVR_SetConnectTime(5000,1);
        long lUserID,m_iPlayhandle;
        NET_DVR_DEVICEINFO DeviceInfo;
        lUserID = NET_DVR_Login("221.10.249.139", 8000, "admin", "12345", &DeviceInfo);    NET_DVR_CLIENTINFO playstru;
        playstru.lChannel=1;
        playstru.lLinkMode =0x80000000;
        playstru.sMultiCastIP="";        m_iPlayhandle = NET_DVR_RealPlay(lUserID, &playstru);
        Sleep(1000);
        long hd;
        hd = NET_DVR_GetRealPlayerIndex(m_iPlayhandle);
    unsigned long realSize;
        PlayM4_GetBMP(hd,&buf[0],1024*1024,&realSize); BITMAPINFO* bmInfo=new BITMAPINFO();
    CBitmap bm;
    int n= bm.SetBitmapBits(realSize-54,&buf[54]);
    CStatic * ptc=(CStatic *)GetDlgItem(IDC_STATIC);
    ptc->ModifyStyle(0xF,SS_BITMAP);
    HBITMAP hBmp=(HBITMAP)bm;
    ptc->SetBitmap(hBmp);