HBITMAP hbm=CreateDIBSection(hdc,(BITMAPINFO*)&bih,DIB_RGB_COLORS,&bits,NULL,NULL);如何讲bmp图像中的数据填充进去、
亿分感谢
~~

解决方案 »

  1.   

    其实我是要内存中的一张bmp和它关联起来
    不知道怎么操作了
      

  2.   


    //功能: 通过位图文件名创建位图对象
    //参数: hDC设备句柄; lpszFileName位图文件名
    //返回: 创建成功返回true,否则返回false
    BOOL CMyBitmap::Create(HDC hDC, LPSTR lpszFileName)
    {
    //先判断,如果位图不空
    if(m_hBmp != NULL)
    {
    ::DeleteObject(m_hBmp);
    m_hBmp = NULL;
    }
    //读位图文件,得到位图句柄
    HANDLE hFile = CreateFile(
    lpszFileName,
    GENERIC_READ,
    FILE_SHARE_READ,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL);
    if(hFile == INVALID_HANDLE_VALUE)
    return FALSE;
    //读位图文件头
    BITMAPFILEHEADER bmpFileHeader;
    DWORD dwNumberOfBytesRead;
    if(ReadFile(hFile, (LPVOID)&bmpFileHeader, sizeof(BITMAPFILEHEADER), &dwNumberOfBytesRead, NULL) == 0)
    {
    CloseHandle(hFile);
    return FALSE;
    }
    //读位图信息
    BITMAPINFO *pBmpInfo = new BITMAPINFO;
    if(ReadFile(hFile, pBmpInfo, sizeof(BITMAPINFOHEADER), &dwNumberOfBytesRead, NULL) == 0)
    {
    CloseHandle(hFile);
    return FALSE;
    }
    m_iWidth = pBmpInfo->bmiHeader.biWidth;
    m_iHeight = pBmpInfo->bmiHeader.biHeight;
    //读位图数据
    PVOID pBmpData;
    //创建DIB位图句柄
    m_hBmp = CreateDIBSection(hDC, pBmpInfo, DIB_RGB_COLORS, (PVOID *)&pBmpData, NULL, 0);
    if(m_hBmp == NULL)
    return FALSE;
    else  //读位图数据
    if(ReadFile(hFile, pBmpData, pBmpInfo->bmiHeader.biSizeImage, &dwNumberOfBytesRead, NULL) == 0)
    {
    CloseHandle(hFile);
    return FALSE;
    }
    CloseHandle(hFile);
    return TRUE;
    }
      

  3.   

    第四个参数是一个输出参数,它指向的就是空个Bmp位图数据区
      

  4.   

    第四个参数不是要去填充,他是一个变量,他记录了你创建的DIBSECTION在内存中的首地址。