BYTE* Data //bmp数据
int pBitsSize //bmp数据大小
int intImgSize //生成的bmp文件大小
CString filename//bmp文件名
void CreateBMP(BYTE* Data,int pBitsSize, int intImgSize, CStringfilename)
{
//定义图形大小
int iWidth = 320;
int iHeight = 240;
int iPixel = 8;
RGBQUAD Quad[256];
//图形格式参数
LPBITMAPINFO lpbmih = new BITMAPINFO;
lpbmih->bmiHeader.biSize =sizeof(BITMAPINFOHEADER);
lpbmih->bmiHeader.biWidth = iWidth;
lpbmih->bmiHeader.biHeight = -iHeight;
lpbmih->bmiHeader.biPlanes = 1;
lpbmih->bmiHeader.biBitCount = iPixel;
lpbmih->bmiHeader.biCompression =BI_RGB;
lpbmih->bmiHeader.biSizeImage = 0;
lpbmih->bmiHeader.biXPelsPerMeter = 0;
lpbmih->bmiHeader.biYPelsPerMeter = 0;
lpbmih->bmiHeader.biClrUsed = 0;
lpbmih->bmiHeader.biClrImportant = 0;
//设定调色盘数据Quad(红色)
for(int n=0; n<256;n++){
Quad[n].rgbBlue = 0;
Quad[n].rgbGreen=0;
Quad[n].rgbRed=n;
Quad[n].rgbReserved=0;
}
BYTE *pBits;
//添加自绘图形
pBits = Data;
//保存到文件并创建位图结构
BITMAPFILEHEADER bmfh;
ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
*((char *)&bmfh.bfType) = 'B';
*(((char *)&bmfh.bfType) + 1) = 'M';
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD);
bmfh.bfSize = intImgSize;// bmfh.bfOffBits +(iWidth * iHeight) * iPixel / 8;
TCHAR szBMPFileName[128];
//int iBMPBytes = iWidth * iHeight * iPixel /8;
strcpy(szBMPFileName,filename);
CFile file;
if(file.Open(szBMPFileName,CFile::modeWrite |CFile::modeCreate))
{
file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
file.Write(Quad,sizeof(Quad));
file.Write(pBits,pBitsSize);
file.Close();
}
delete lpbmih; lpbmih = NULL;
}