怎样可以把图片转换成数据格式存储,并再把这数据格式在界面中再显示成图片。谢谢!
可能会用到CreateDIBitmap和SetBitmap等函数。

解决方案 »

  1.   

    WINDOWS的窗口图像从本质上来说,是WINDOWS在内存DC上绘制的一幅图像, 
    我们要将此图像存储起来,首先要获得WINDOWS窗口的区域大小,然后将区域中的图像 
    存在一内存DC中,由于内存DC是与设备相关的位图,所以将它存储起来还要用DDBTODIB 
    函数转换成DIB位图,最后再用WriteDIB函数转储成BMP文件。    
      BOOL   WriteWindowToDIB(   LPTSTR   szFile,   CWnd   *pWnd   ) 

      CBitmap     bitmap; 
      CWindowDC   dc(pWnd); 
      CDC       memDC; 
      CRect     rect;   memDC.CreateCompatibleDC(&dc);   pWnd-> GetWindowRect(rect); 
    //用窗口区域大小定义一个内存DC   ,并将窗口图像暂存其中 
      bitmap.CreateCompatibleBitmap(&dc,   rect.Width(),rect.Height()   );   CBitmap*   pOldBitmap   =   memDC.SelectObject(&bitmap); 
      memDC.BitBlt(0,   0,   rect.Width(),rect.Height(),   &dc,   0,   0,   SRCCOPY);   //   如果设备支持调色板,创建调色板 
      CPalette   pal; 
      if(   dc.GetDeviceCaps(RASTERCAPS)   &   RC_PALETTE   ) 
      { 
        UINT   nSize   =   sizeof(LOGPALETTE)   +   (sizeof(PALETTEENTRY)   *   256); 
        LOGPALETTE   *pLP   =   (LOGPALETTE   *)   new   BYTE[nSize]; 
        pLP-> palVersion   =   0x300;     pLP-> palNumEntries   = 
          GetSystemPaletteEntries(   dc,   0,   255,   pLP-> palPalEntry   );     //   Create   the   palette 
        pal.CreatePalette(   pLP   );     delete[]   pLP; 
      }   memDC.SelectObject(pOldBitmap);   //   转换   bitmap   到   a   DIB 
      HANDLE   hDIB   =   DDBToDIB(   bitmap,   BI_RGB,   &pal   );   if(   hDIB   ==   NULL   ) 
        return   FALSE;   //   Write   it   to   file 
      WriteDIB(   szFile,   hDIB   );   //   Free   the   memory   allocated   by   DDBToDIB   for   the   DIB 
      GlobalFree(   hDIB   ); 
      return   TRUE; 
      

  2.   

    保存图片是这样,通过读取文件
    CFile file;  //定义文件对象 if( !file.Open( m_szImagePath, CFile::modeRead ) ) //以只读方式打开文件
    {
    MessageBox( _T("无法打开BMP文件,保存失败!"), _T("提示"), MB_OK  | MB_OK | MB_ICONERROR );
    return false;
    }
    保存到一个Char数组里.之后你想保存到那里的话就把CHAR放到哪里,不过我就一般放在ACCESS而这数据格式在界面中再显示成图片,则双是读取你保存的CHAR数组,再
    oid CProjectionDlg::ImageDataToHBITMAP( char* &pData )//数据库的数据转为HBITMAP
    {
    LPSTR hDIB; LPVOID lpDIBBits; BITMAPFILEHEADER bmfHeader; DWORD bmfHeaderLen; bmfHeaderLen = sizeof( bmfHeader); strncpy_s( (LPSTR)&bmfHeader, bmfHeaderLen, (LPSTR)pData, bmfHeaderLen ); hDIB = pData + bmfHeaderLen; BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB; BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB; lpDIBBits = pData + ((BITMAPFILEHEADER *)pData)->bfOffBits; CClientDC dc(this); HBITMAP m_hBmp = CreateDIBitmap( dc.m_hDC, &bmiHeader, CBM_INIT, lpDIBBits, &bmInfo, DIB_RGB_COLORS );
    }HBITMAP有了之后,你应该能显示的啦
      

  3.   

    http://blog.csdn.net/morbi/article/details/5674687
      

  4.   

    可以用opencv试试,保存成xml格式,存储和读取都很方便
      

  5.   


    void CGdiplusTestDoc::Serialize(CArchive& ar)
    {
    if (ar.IsStoring())
    {
    // TODO: add storing code here
    HGLOBAL m_hMem = GlobalAlloc(GMEM_MOVEABLE, 0);
    IStream *pstm=NULL;
    CreateStreamOnHGlobal(m_hMem, TRUE, &pstm);
    CLSID clsid;
    USES_CONVERSION;
    GetCodecClsid(A2W("image/jpeg"), &clsid);
    m_pImage->Save(pstm,&clsid,NULL);
    if (pstm==NULL)
    return;
    LARGE_INTEGER liBeggining = { 0 };
    pstm->Seek(liBeggining, STREAM_SEEK_SET, NULL);
    DWORD wTemp=GlobalSize(m_hMem);
    LPBYTE lpData = (LPBYTE)GlobalLock(m_hMem);
        ar << wTemp; 
            ar.Write(lpData,wTemp);
    pstm->Release();
    GlobalUnlock(m_hMem);
    }
    else
    {
    // TODO: add loading code here
    DWORD wTemp;
        ar >> wTemp; 
    HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, wTemp);
        if (m_hMem == NULL)
    return;
    IStream *pstm=NULL;
    CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
    if (pstm==NULL)
    return;
    BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
    ar.Read(pmem,wTemp);
        if (m_pImage) {
    delete m_pImage;
    m_pImage = NULL;
       }
           using namespace Gdiplus; 
       if (m_pImage!=NULL)
       {
       delete m_pImage;
       m_pImage=NULL;
       }
       m_pImage = Image::FromStream(pstm, FALSE);
    pstm->Release();
    GlobalUnlock(m_hMem);
    }
    }
    这段代码是将图片串行化,然后还原。可以参考一下。m_pImage是Image类型,参考gdi+,你也可以不用Gdi+,CImage也提供了save功能,
      

  6.   

    求简单的话,可以直接CxImage搞定