读取文件,越过前14字节(BITMAPFILEHEADER),则以下40字节的内容就是BITMAPINFOHEADER

解决方案 »

  1.   

    1、如果你有一个DIB指针,则
          lpbi = (LPBITMAPINFOHEADER)lpDIB;
      强制类型转换,其中pDIB为指向DIB结构的指针。
    2、如果你是读文件
             CFile cf;
    if( !cf.Open( pszFilename, CFile::modeRead ) )
    return( FALSE );
    DWORD dwDibSize;
    dwDibSize =
    cf.GetLength() - sizeof( BITMAPFILEHEADER ); unsigned char *pDib;
    pDib = new unsigned char [dwDibSize];
    if( pDib == NULL )
    return( FALSE ); BITMAPFILEHEADER BFH;
    if( cf.Read( &BFH, sizeof( BITMAPFILEHEADER ) )
    != sizeof( BITMAPFILEHEADER ) ||BFH.bfType != 'MB' ||
    cf.Read( pDib, dwDibSize ) !=   dwDibSize )
             {
              delete [] pDib;
    return( FALSE );
    }
    if( m_pDib != NULL )
    delete m_pDib; m_pDib = pDib;
    m_dwDibSize = dwDibSize; m_pBIH = (BITMAPINFOHEADER *) m_pDib;

              m_pDibBits =
    &m_pDib[sizeof(BITMAPINFOHEADER)];
    return( TRUE );
    3、如果你是其他的,我想也没有多复杂,你要是找到颗粒记数方面的文章,一定要发给我!!
               email:[email protected]