读书人

图像保存为bmp文件,该怎么处理

发布时间: 2012-01-28 22:06:13 作者: rapoo

图像保存为bmp文件
一个512×512的彩色图像,已经解码出来了,RGB分别放在三个数组中channel[0]、channel[1]、channel[2]中,如何保存为bmp格式文件?

[解决办法]
首先要知道bmp位图格式
1.文件头
2.文件信息头
3.调色版
4.图像数据

从楼主的数据看来,应该是24位的吧
那没必要用到调色板

BITMAPFILEHEADERbf;//位图文件头
BITMAPINFOHEADERbi;//位图信息头
BYTE*lpBuf; //位图数据


int nWidth= 512;//位图宽
int nHeight= 512;//位图高


//BMP文件信息头
bi.biSize= 40;
bi.biWidth= nWidth;
bi.biHeight= nHeight;
bi.biPlanes= 1;
bi.biBitCount= 24;
bi.biCompression= BI_RGB;
bi.biSizeImage= (nWidth*24 +31)/32*4*nHeight;
bi.biXPelsPerMeter= 0;
bi.biYPelsPerMeter= 0;
bi.biClrUsed= 0;
bi.biClrImportant= 0;

//为图像数据申请空间
lpBuf = (BYTE*)malloc( sizeof(BYTE) * bi.biSizeImage );

//BMP文件头
bf.bfType= 0x4d42;
bf.bfSize= 14 + 40 + bi.biSizeImage;
bf.bfReserved1= 0;
bf.bfReserved2= 0;
bf.bfOffBits= 14 + 40;

CFile file;
file.Open( "C://bmp.bmp ", CFile::Create|CFile::Write);
file.Write((void*)&bf, sizeof(BITMAPFILEHEADER));
file.Write((void*)&bi, sizeof(BITMAPINFOHEADER));
file.Write((void*)lpBuf, sizeof(BYTE) * bi.biSizeImage);
file.Close();


以上代码没上机测试过.这只是方法

读书人网 >VC/MFC

热点推荐