写入位图

 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 }

 

posted @ 2013-11-29 10:53  上弦白月  阅读(196)  评论(0)    收藏  举报