创建24/32bit BMP

来源:互联网 发布:俄罗斯代购扒皮 知乎 编辑:程序博客网 时间:2024/04/28 09:31
 BOOL SaveBitmap(BYTE * pBuffer, long lBufferSize )
 {
  HANDLE hf = CreateFile( L"tmp.bmp", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, NULL, NULL ); //create a bmp file
  
  if( hf == INVALID_HANDLE_VALUE )
   return 0;

  // write head 
  BITMAPFILEHEADER bfh;
  memset( &bfh, 0, sizeof( bfh ) );
  bfh.bfType = 'MB';
  bfh.bfSize = sizeof( bfh ) + lBufferSize + sizeof( BITMAPINFOHEADER );
  bfh.bfOffBits = sizeof( BITMAPINFOHEADER ) + sizeof( BITMAPFILEHEADER );
  DWORD dwWritten = 0;
  WriteFile( hf, &bfh, sizeof( bfh ), &dwWritten, NULL );
  
  // write format info 
  BITMAPINFOHEADER bih; memset( &bih, 0, sizeof( bih ) );
  bih.biSize = sizeof( bih );
  bih.biWidth = lWidth;
  bih.biHeight = lHeight;
  bih.biPlanes = 1;
  bih.biBitCount = 24; //you can set 32 if data is 32bit
  WriteFile( hf, &bih, sizeof( bih ), &dwWritten, NULL );
  
  // write data 
  WriteFile( hf, pBuffer, lBufferSize, &dwWritten, NULL );
  
  CloseHandle( hf );

  return 0;
 }