BOOL saveBmp(CString bmpName, unsigned char *imgBuf, long width, long height, int biBitCount, RGBQUAD *pColorTable)
{
//如果位圖資料指針為0,則沒有資料傳入,函數傳回
if(!imgBuf) return 0;
//顔色表大小,以位元組為機關,灰階圖像顔色表為1024位元組,彩×××像顔色表大小為0
int colorTablesize=0;
if(biBitCount==8)
colorTablesize=1024;
//待存儲圖像資料每行位元組數為4的倍數
long lineByte=(width * biBitCount/8+3)/4*4;
//以二進制寫的方式打開檔案
FILE *fp=fopen(bmpName,"wb");
if(fp==0)
return 0;
//申請位圖檔案頭結構變量,填寫檔案頭資訊
BITMAPFILEHEADER fileHead;
fileHead.bfType = 0x4D42;//bmp類型
//bfSize是圖像檔案4個組成部分之和
fileHead.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + colorTablesize
+ lineByte*height;
fileHead.bfReserved1 = 0;
fileHead.bfReserved2 = 0;
//bfOffBits是圖像檔案前3個部分所需空間之和
fileHead.bfOffBits=54+colorTablesize;
//寫檔案頭進檔案
fwrite(&fileHead, sizeof(BITMAPFILEHEADER),1, fp);
//申請位圖資訊頭結構變量,填寫資訊頭資訊
BITMAPINFOHEADER head;
head.biBitCount=biBitCount;
head.biClrImportant=0;
head.biClrUsed=0;
head.biCompression=0;
head.biHeight=height;
head.biPlanes=1;
head.biSize=40;
head.biSizeImage=lineByte*height;
head.bi;
head.biXPelsPerMeter=0;
head.biYPelsPerMeter=0;
//寫位圖資訊頭進記憶體
fwrite(&head, sizeof(BITMAPINFOHEADER),1, fp);
//如果灰階圖像,有顔色表,寫入檔案
fwrite(pColorTable, sizeof(RGBQUAD),256, fp);
//寫位圖資料進檔案
fwrite(imgBuf, height*lineByte, 1, fp);