1: Read data from BMP file

CString bmpfile;
 bmpfile.Format(TEXT("c:\\tp_empty.bmp"));
 BITMAPFILEHEADER bmpheader;
 BITMAPINFOHEADER bmpinfo;
 DWORD bytesread;
 HANDLE file = CreateFile ( bmpfile , GENERIC_READ, FILE_SHARE_READ,
   NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL );
 if ( NULL == file )
  return 0;
 if ( ReadFile ( file, &bmpheader, sizeof ( BITMAPFILEHEADER ),
  &bytesread, NULL ) == false )
 {
  CloseHandle ( file );
  return 0;
 }
 if ( ReadFile ( file, &bmpinfo, sizeof ( BITMAPINFOHEADER ),
  &bytesread, NULL ) == false )
 {
  CloseHandle ( file );
  return 0;
 }
 if ( bmpheader.bfType != 'MB' )
 {
  CloseHandle ( file );
  return 0;
 }
 if ( bmpinfo.biCompression != BI_RGB )
 {
  CloseHandle ( file );
  return 0;
 }
 if ( bmpinfo.biBitCount != 8 )
 {
  CloseHandle ( file );
  return 0;
 }
 int width   = bmpinfo.biWidth;
 int height  = abs ( bmpinfo.biHeight );
 int size = bmpheader.bfSize - bmpheader.bfOffBits;
 BYTE* Buffer = new BYTE[size ];
 SetFilePointer ( file, bmpheader.bfOffBits, NULL, FILE_BEGIN );
 if ( ReadFile ( file, Buffer, size, &bytesread, NULL ) == false )
 {
  delete [] Buffer;
  CloseHandle ( file );
  return 0;
 }
 CloseHandle ( file );
 BYTE* lpBits = new BYTE[size ];
 
 for( int y = 0; y < height; y++ )
 {
  for(int x = 0; x < width; x++)
  {
   lpBits[y*width + x] = Buffer[(height-1-y)*width+x];
  }
  
 }

if(Buffer)

{

delete[] Buffer;

}

if(lpBits )

{

delete[] lpBits ;

}

posted @ 2011-12-16 17:04  lcryby  阅读(214)  评论(0)    收藏  举报