c++ 从数据库拿到二进制图片数据后(image),怎么显示到mfc控件上?

大致代码如下:
_variant_t varBLOB;
char *ImgBuffer = (_bstr_t)varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem(_variant_t(str1))->GetChunk(lDataSize);//获得image字段存下来的长度
IplImage * img_hope = cvCreateImageHeader(cvSize(640,480), IPL_DEPTH_8U,3);//试图将获得的数据转化为IplImage
cvSetData(img_hope,ImgBuffer,img_hope->widthStep);

        try
        {
            if(varBLOB.vt == (VT_ARRAY | VT_UI1))
            {
                if(m_pJPGBuffer = new char[lDataSize+1])        
                {    
                    char *pBuf = NULL;
                    SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
                    memcpy(m_pJPGBuffer,pBuf,lDataSize);                
                    SafeArrayUnaccessData (varBLOB.parray);
                    FileLen = lDataSize;
                   // m_pJPGBuffer -> pPicture                    
                    HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, FileLen );
                    LPVOID lpBuf = ::GlobalLock( hMem );                    
                    memcpy(lpBuf,m_pJPGBuffer,FileLen);
        DrawPicToHDC(img_hope,IDC_SQLCAPTURE1);//大概的逻辑就是这样,try后面的也是将数据保存下来的方式。
//这个是显示到控件上的代码
void CCameraOpenVCDemoDlg::DrawPicToHDC(IplImage * img, UINT ID)
{
    CDC *pDC=GetDlgItem(ID)->GetDC();  
    HDC hDC=pDC->GetSafeHdc();  
    CRect rect;  
    GetDlgItem(ID)->GetClientRect(&rect);  
    CCvvImage cimg;  
    cimg.CopyOf(img);  
    cimg.DrawToHDC(hDC,&rect);  
    ReleaseDC(pDC);  
}


真的一点思路都没有了。有一点可以确定的是上传到数据库的数据一定是二进制流。使用grid++report是可以读取到的


参考:
IPicture  *ppic = NULL;
HRESULT  hr;
hr = OleLoadPicturePath((CComBSTR)m_pic_path.GetBuffer(),(LPUNKNOWN)NULL,0,0,IID_IPicture,(LPVOID*)&ppic);
if (SUCCEEDED(hr))
{
    ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
    CDC* pdc = GetDC();
 
    OLE_XPOS_HIMETRIC xSrc = 0;  // 图片中当前显示区域的x
    OLE_YPOS_HIMETRIC ySrc  = 0;  // 图片中当前显示区域的y
    OLE_XSIZE_HIMETRIC cxSrc = m_pic_width; // 图片中当前显示区域的宽度
    OLE_YSIZE_HIMETRIC cySrc = m_pic_height; // 图片中当前显示区域的高度
    ppic->get_Width(&cxSrc);
    ppic->get_Height(&cySrc);
 
    ppic->Render(*pdc,0,0,m_pic_width, m_pic_height,0,cySrc,cxSrc,-cySrc,&rect);
 
    ppic->Release();
    ReleaseDC(pdc);
    ppic = NULL;
}