BMP灰度圖保存程序

BOOL saveBmp(CString bmpName, unsigned char *imgBuf, long width, long height, int biBitCount, RGBQUAD *pColorTable)ide

{函數

//若是位圖數據指針爲0,則沒有數據傳入,函數返回指針

if(!imgBuf) return 0;內存

//顏色表大小,以字節爲單位,灰度圖像顏色表爲1024字節,彩×××像顏色表大小爲0it

int colorTablesize=0;io

if(biBitCount==8)class

colorTablesize=1024;變量

//待存儲圖像數據每行字節數爲4的倍數sed

long lineByte=(width * biBitCount/8+3)/4*4;file

//以二進制寫的方式打開文件

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);

//若是灰度圖像,有顏色表,寫入文件

if(biBitCount==8)

fwrite(pColorTable, sizeof(RGBQUAD),256, fp);

//寫位圖數據進文件

fwrite(imgBuf, height*lineByte, 1, fp);

//關閉文件

fclose(fp); return 1;

}

相關文章
相關標籤/搜索