我希望把图像数组用GDI中的fromstream读取并显示,但fromstream结果无效的参数

具体代码如下

FILE* fpIn;
    fpIn = fopen("D:\\yangben.bmp", "rb");
    if (fpIn == NULL)
    {
        MessageBox("文件打不开!");
    }
    else
    {
       
      
        fseek(fpIn, 0L, SEEK_END);
        int len = ftell(fpIn);

        BYTE* img = new BYTE[len];
        fread(img, sizeof(BYTE), len, fpIn);
        
        HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, len);
        BYTE* pData = (BYTE*)GlobalLock(hGlobal);
        memcpy(pData, img, len);  //  拷贝位图数据进去
        GlobalUnlock(hGlobal);
        IStream* pStream = NULL;
        CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);
        
            if (pStream == NULL)
            {
                MessageBox("321");
            }
            else
            {
                pDC = GetDC();

                Graphics graphics(pDC->m_hDC);
                
                Image* pImg= Image::FromStream(pStream);
                graphics.DrawImage(pImg, 0, 0, rect.Width(), rect.Height());
                ReleaseDC(pDC);
               
            }
        

        GlobalFree(hGlobal);
        
        pStream->Release();
        fclose(fpIn);
    }

结果数据流读取不到,在Image::FromStream(pStream)上说无效的参数,我查看过pStream的大小是没问题的,我研究了很久,可能是FromStream要识别BMP等格式的数据,但是我把这个图片BMP文件全部读取出来做成pStream也没法用,请问怎么解决。当然我可以直接用LOAD读取这个图片文件,但这么做主要是为了将从相机获取的图像数组显示出来,所以从读取一个BMP文件里的信息来练习。

 


        fseek(fpIn, 0L, SEEK_END);
        int len = ftell(fpIn);
         fseek(fpIn, 0L, SEEK_SET);  // <---- 把文件指针移动到头上,否则fread读不到任何数据
       BYTE* img = new BYTE[len];
        fread(img, sizeof(BYTE), len, fpIn); // <-- 用个变量接一下返回值,看读到了多少数据