VC从数据库里读出的image是字节流,怎么在对话框上恢复成图片样子呢?非常感谢!!!

解决方案 »

  1.   

    如果是BMP可以先整个读到内存里,然后取出文件头,获取图片信息,然后根据这些信息取出真正的图片数据,显示出来,你的问题主要是解析图片格式的问题。
      

  2.   

    你可以参考一下这个例子:http://hi.baidu.com/%C5%E1%F6%CE0227/blog/item/f34fd13c8e2224c09e3d6258.html
    其实还有一个简单的办法,就是你把图片读出来写成文件,然后用LoadImage载入显示就可以了。
      

  3.   

    我能写成文件,然后LoadImage,能写点代码吗?我刚学,还多常用函数还没见过。。
      

  4.   


    #include <atlbase.h>
    #include <afxpriv2.h>void CIpicDlg::ShowPic()
    {
    CComQIPtr<IPicture>spIPicture;
    HRESULT m_hr;
    //unsigned char* pPictureData;
    //UINT nPictureSize;
    CRect rc;
    m_wndPic1.GetClientRect(&rc);
    CDC* pDC = m_wndPic1.GetDC();
    if(m_pPictureData)
    {
    CMemFile memfile;
    memfile.Attach(m_pPictureData,m_nPictureSize);
    CArchive ar(&memfile, CArchive::load | CArchive::bNoFlushOnDelete);
    CArchiveStream arcstream(&ar);
    HRESULT hr = OleLoadPicture((IStream*)&arcstream, 0, FALSE,
    IID_IPicture, (void**)&spIPicture);
    ASSERT(SUCCEEDED(hr) && spIPicture);
    OLE_XSIZE_HIMETRIC hmWidth = 0;
    OLE_YSIZE_HIMETRIC hmHeight = 0;
    m_hr = spIPicture->get_Width(&hmWidth);
    ASSERT(SUCCEEDED(m_hr));
    m_hr = spIPicture->get_Height(&hmHeight);
    ASSERT(SUCCEEDED(m_hr));
    spIPicture->Render(pDC->m_hDC, rc.left, rc.top, rc.Width(), rc.Height(),
    0, hmHeight, hmWidth, -hmHeight, NULL);
    CSize sz(hmWidth,hmHeight);
    pDC->HIMETRICtoDP(&sz);
    }
    if (spIPicture) 
    {
    spIPicture.Release();
    }
    }用的是微软的Ipicture的Com组件,代码测试过没问题,m_pPictureData是图形数据在内存中的指针,m_nPictureSiz是图形数据大小,sz可以得到图片大小,如果你需要的话。
    我测试的是jpg文件,代码仅供参考。