Hi, all
   本人已认真看完了BMP格式文件结构,在网本论坛下了DIBDisplay实例,现想将bmp格式文件中文件头二进制数据转换为16进制数据,图像灰度二进制数据转换为10进制数据,并按图像属性按行列存为xls文件,以对BMP文件有有更深入的了解,同时方便初学者学习,哪位高手能指点一下数据存储方面的知识?

解决方案 »

  1.   

    了解:
    1、位图头结构(BITMAPINFOHEADER)
    2、颜色索引(调色板)
    3、位图数据(数据结构规范,行对齐,行倒置)
    网上bmp的文章很多,搜索
      

  2.   

    每个数据之间中\t分割,copy到excel里面就可以自动分列显示了
      

  3.   

    现在在ReadDIBFile()函数中,读到指针pDIB 所指数据为二进制数据,怎样将其以10或16进制存到csv文件中,
    HDIB CDibImage::ReadDIBFile(CFile& file)
    {
    BITMAPFILEHEADER bmfHeader;
    HDIB hDIB;
    LPSTR pDIB;
    DWORD dwBitsSize;

    hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
    if (hDIB == 0)
    {
    return NULL;
    }

    pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
    if (file.ReadHuge(pDIB, dwBitsSize ) !=
    dwBitsSize ) // 读象素
    {
    ::GlobalUnlock((HGLOBAL) hDIB);
    ::GlobalFree((HGLOBAL) hDIB);
    return NULL;
    }
    ::GlobalUnlock((HGLOBAL) hDIB); CString str1,str2="";
    char* buffpoint;
    char buf[2]={0};
    for(int i=0;i<1078;i++)
    {
    str1="";
    buffpoint=str2.GetBuffer(2);
    itoa(*(pDIB+i),buffpoint,16);
    str2.ReleaseBuffer();
    str1=str2; *pstr+=str1+",";

    }
    int k=0; for(;i<1921078;)
    {
    //*(pdata+i) = *(pDIB+i);
    pstr[i].Format("%x",*(pDIB+i));
    i+=32000;
    k+=20;
    } CFile m_file;
    CTime ctimh,ctim;
    ctim=CTime::GetCurrentTime();
    ctimh=CTime::GetCurrentTime();
    CString filename="G:\\xl\\bmp\\";
    filename+=ctim.Format("%y-%m-%d");
    filename+=ctimh.Format("%h-%m-%s");
    filename+=".txt"; m_file.Open(filename,CFile::modeCreate
    |CFile::modeNoTruncate
    |CFile::modeWrite
    |CFile::shareDenyNone);
    m_file.WriteHuge(pstr,1921078); m_file.Close();
    //delete []pdata;
    delete []pstr; return hDIB;
    }我读到的是指针中的数据,怎么存下来