将摄像头获取的原始数据,保存为BMP格式的文件
我想生成24真彩色的bmp图片,但是出来的始终是黑白图,为什么?困扰哈几天了
该功能的代码: CHSDTestDlg *pVideo = (CHSDTestDlg *)param;
BITMAPFILEHEADER bmfHdr; //定义文件头
BITMAPINFOHEADER bmiHdr; //定义信息头
//对信息头进行赋值
bmiHdr.biSize = sizeof(BITMAPINFOHEADER);
USHORT m_WidthOfModel = 0;
USHORT m_HeightOfModel = 0;
GetGrabImageSize( &m_WidthOfModel, &m_HeightOfModel, 'A');//获取图像数据的宽和高
bmiHdr.biWidth = m_WidthOfModel;
bmiHdr.biHeight = m_HeightOfModel;
bmiHdr.biPlanes = 1;
bmiHdr.biBitCount = 24;
bmiHdr.biCompression = BI_RGB;
bmiHdr.biSizeImage = m_WidthOfModel*m_HeightOfModel;
bmiHdr.biXPelsPerMeter = 0;
bmiHdr.biYPelsPerMeter = 0;
bmiHdr.biClrUsed = 0;
bmiHdr.biClrImportant = 0;
//对文件头进行赋值
bmfHdr.bfType = (WORD)0x4D42; //;((WORD)('M'<<8) | 'B')
bmfHdr.bfSize = (DWORD)(sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER) + m_WidthOfModel*m_HeightOfModel);
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = 54;
//保存文件
CFileDialog lpzsOpenFile(FALSE, NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , _T("文件类型(*.bmp;*.jpg)|*.bmp;*.jpg||"));//生成一个对话框
CString szGetName(_T(".//Model.bmp"));
if(lpzsOpenFile.DoModal() == IDOK)//假如点击对话框确定按钮
{
szGetName = lpzsOpenFile.GetPathName(); //得到打开文件的路径
}
CFile fp;
fp.Open( szGetName, CFile::modeCreate | CFile::modeWrite);
fp.Write((LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER)); //写文件头
fp.Write((LPSTR)&bmiHdr,sizeof(BITMAPINFOHEADER)); //写信息头
fp.Write( pVideo->m_pPhotoBuffer, m_WidthOfModel*m_HeightOfModel);//写数据,pVideo->m_pPhotoBuffer里保存的是抓取的一帧数据
fp.Close();