1 BOOL SaveBMP(BYTE* pBuffer,long width,long height,CString lpName)
2
3 {
4
5 long lBufferSize=width*height*3;//每像素3字节
6
7 BITMAPFILEHEADER bfh;//文件头
8
9 memset( &bfh, 0, sizeof( bfh ) );
10
11 bfh.bfType = 'MB';//格式总为'MB'
12
13 bfh.bfSize = sizeof( bfh ) + lBufferSize + sizeof( BITMAPINFOHEADER );//文件大小
14
15 bfh.bfOffBits = sizeof( BITMAPINFOHEADER ) + sizeof( BITMAPFILEHEADER );//位图数据起始位置
16
17 BITMAPINFOHEADER bih;//信息头
18
19 memset( &bih, 0, sizeof( bih ) );
20
21 bih.biSize = sizeof( bih );
22
23 bih.biWidth = width;
24
25 bih.biHeight = height;
26
27 bih.biPlanes = 1;
28
29 bih.biBitCount = 24;//24位真彩色
30
31 //创建位图文件
32
33 HANDLE hf = CreateFile(lpName, GENERIC_WRITE, FILE_SHARE_READ, NULL,CREATE_ALWAYS,NULL,NULL);
34
35 if( hf == INVALID_HANDLE_VALUE )
36
37 return FALSE;
38
39 DWORD dwWritten = 0;//记录写入多少字节。可检测写入是否完整
40
41 WriteFile( hf, &bfh, sizeof( bfh ), &dwWritten, NULL );//写入位图文件头
42
43 WriteFile( hf, &bih, sizeof( bih ), &dwWritten, NULL );//写入信息头
44
45 WriteFile( hf, pBuffer, lBufferSize, &dwWritten, NULL );//写入位图数据
46
47 CloseHandle( hf );
48
49 return TRUE;
50
51 }