我用cdib的save函数保存图像,程序没有错误,但运行后不能保存,谁能帮帮我呀???多谢啦!!

解决方案 »

  1.   

    你debug进去,看看是不是真的创建了cdib对象;里面的数据是否为空。没用过这个库,不过和CXimage应该是一样的原理。
      

  2.   

    我用的这段代码:
    CFileDialog fileDialog(FALSE, "*.BMP", NULL, NULL,"位图文件(*.BMP)|*.bmp;*.BMP|");if (fileDialog.DoModal() == IDOK)  
    {  
       UpdateData(true);    m_dib.Save(fileDialog.GetPathName() );
        UpdateData(false);
    }来实现在基于对话框下保存图像,运行没有错误,但是不能将图像保存到你指定的路径下。
    哪位高手能帮我看看看那???万分感谢!!
      

  3.   

    BOOL CDib::Save(const char *pszFilename)
    {//   If   we   have   no   data,   we   can 't   save. 
    if(   m_pDib   ==   NULL   ) 
    return(   FALSE   ); CFile   cf; //   Attempt   to   create   the   file. 
    if(   !cf.Open(   pszFilename, 
    CFile::modeCreate   |   CFile::modeWrite   )   ) 
    return(   FALSE   ); //   Write   the   data. 
    try{ //   First,   create   a   BITMAPFILEHEADER 
    //   with   the   correct   data. 
    BITMAPFILEHEADER   BFH; 
    memset(   &BFH,   0,   sizeof(   BITMAPFILEHEADER   )   ); 
    BFH.bfType   =   'MB '; 
    BFH.bfSize   =   sizeof(   BITMAPFILEHEADER   )   +   m_dwDibSize; 
    BFH.bfOffBits   =   sizeof(   BITMAPFILEHEADER   )   + 
    sizeof(   BITMAPINFOHEADER   )   + 
    m_nPaletteEntries   *   sizeof(   RGBQUAD   ); //   Write   the   BITMAPFILEHEADER   and   the 
    //   Dib   data. 
    cf.Write(   &BFH,   sizeof(   BITMAPFILEHEADER   )   ); 
    cf.Write(   m_pDib,   m_dwDibSize   ); 
    } //   If   we   get   an   exception,   delete   the   exception   and 
    //   return   FALSE. 
    catch(   CFileException   *e   )

    e-> Delete(); 
    return(   FALSE   ); 

    //cf.close();
    return(   TRUE   ); }这个是我在cdib类中定义的save函数,我想用opencv打开一幅图像,然后将它用dib保存起来。图像的数据能传给定义的dib对象,但用save保存时,不能实现。高手们帮我想想啊,万分感谢!!
      

  4.   

    BOOL CMyDIB::SaveDibfile(HGLOBAL hDIB, TCHAR * pszFileName)
    {
    DWORD             dwSize;
    HANDLE            fp;
    UCHAR*          pDIB;
    BITMAPFILEHEADER  bfh;
    PBITMAPINFOHEADER pbih;
    SIZE_T          zDIBsize;
    zDIBsize = GlobalSize(hDIB);
    bfh.bfType        = 0x4d42; //"BM";
    bfh.bfSize        = (DWORD) (sizeof(BITMAPFILEHEADER) + zDIBsize);
    bfh.bfReserved1   = 0;
    bfh.bfReserved2   = 0;
    pDIB = (UCHAR *)GlobalLock(hDIB);
    pbih = (PBITMAPINFOHEADER)pDIB;
    // Compute the offset to the array of color indices. 
    bfh.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + 
    pbih->biSize + pbih->biClrUsed  * sizeof (RGBQUAD); 
    fp = CreateFile(pszFileName, GENERIC_WRITE | GENERIC_READ , 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    if (fp == 0)
    return FALSE;
    WriteFile(fp, &bfh, sizeof(BITMAPFILEHEADER), &dwSize, NULL);
    WriteFile(fp, pDIB, (L_UINT) zDIBsize, &dwSize, NULL);
    CloseHandle(fp);
    GlobalUnlock(hDIB);
    return TRUE;
    }