图像保存为bmp文件

wangyanboq 2007-04-29 12:45:50
一个512×512的彩色图像,已经解码出来了,RGB分别放在三个数组中channel[0]、channel[1]、channel[2]中,如何保存为bmp格式文件?
...全文
363 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
setsailgo 2007-04-29
  • 打赏
  • 举报
回复
http://it.sohu.com/2004/03/15/78/article219447801.shtml
就是这个怪兽 2007-04-29
  • 打赏
  • 举报
回复
首先要知道bmp位图格式
1.文件头
2.文件信息头
3.调色版
4.图像数据

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

BITMAPFILEHEADER bf; //位图文件头
BITMAPINFOHEADER bi; //位图信息头
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();



以上代码没上机测试过.这只是方法
SuperCpp 2007-04-29
  • 打赏
  • 举报
回复
用OpenCV很容易做

//channel[0]、channel[1]、channel[2] 分别是usnigned char类型的,长度为512 * 512的数组

const int nWidth = 512;
const int nHeight = 512;
IplImage* pImg = cvCreateImage(cvSize(nWidth, nHeight), IPL_DEPTH_8U, 3);
int nCount = 0;
for(int i = 0; i < nHeight; i++)
{
for(int j = 0; j < nWidth; j++)
{
unsigned char* pData = (unsigned char*)(pImg->imageData + j * pImg->widthStep + i * pImg->nChannels * sizeof(unsigned char));
//OpenCV中RGB的排列顺序是BGR
pData[2] = channel[0][nCount]; //R
pData[1] = channel[1][nCount]; //G
pData[0] = channel[2][nCount]; //B
nCount++;
}
}

cvSaveImage("BMPImage.bmp");

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧