C++BMP图像读取问题

renshengxiaoqu 2013-09-22 11:12:34
void CMyBmpMatch::OpenFile(CString FileName,BYTE *lpBits)
{
CFile file;
CString open_path = _T("c:\\Tulip1.bmp");
if(!file.Open(open_path,CFile::modeRead))
{
AfxMessageBox(_T("不能打开文件"));
return;
}
BITMAPFILEHEADER BFH;
file.Read(&BFH, sizeof(BITMAPFILEHEADER));
if(BFH.bfType != 'MB')
{
AfxMessageBox(_T("不是BMP位图文件或数据有误!\n"));
return;
}
BITMAPINFOHEADER BIH;
file.Read(&BIH,sizeof(BITMAPINFOHEADER));
nWidth = BIH.biWidth; //图像的宽度
nHeight = BIH.biHeight; //图像的高度
nColorBits = BIH.biBitCount; //图像的颜色数
nByteWidth = (nWidth*nColorBits+31)/32*4; //图像的扫描宽度
nColor = (nColorBits>8) ? 0 : (1<<nColorBits); //调色板中的颜色数
RGBQUAD *pColorTable;//颜色表指针
if(nColorBits==8)
{
//申请颜色表所需要的空间,读颜色表进内存
pColorTable=new RGBQUAD[256];
file.Read(pColorTable,sizeof(RGBQUAD)*256);
}
//申请位图数据所需要的空间,读位图数据进内存
lpBits=new BYTE[nByteWidth * nHeight];
file.Read(lpBits,nByteWidth * nHeight);
file.Close();
}
在此调用上面的函数
void CBmpDlg::OnClickedButtonJisuan()
{
// TODO: 在此添加控件通知处理程序代码
CMyBmpMatch bmpmatch;
BYTE *left_lpBits;
bmpmatch.OpenFile(m_left_bmp_edit,left_lpBits);
bmpmatch.SaveFile(m_left_bmp_edit,left_lpBits);
}

问题好多,我想问问,能不能将读进来的数据放在实参所在的指针中。在savefile中调用它
...全文
196 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
renshengxiaoqu 2013-09-23
  • 打赏
  • 举报
回复
我上面的代码为什么在函数调用的时候不行呢,就是我画红框的地方
昆仑道长 2013-09-23
  • 打赏
  • 举报
回复
引用 4 楼 shb8845369 的回复:
你上面分配的内存就少了,一个颜色值不一定就是一BYTE啊,看看我的代码.
上面图片顺序反了,这个是正确的。
昆仑道长 2013-09-23
  • 打赏
  • 举报
回复


你上面分配的内存就少了,一个颜色值不一定就是一BYTE啊,看看我的代码.



max_min_ 2013-09-22
  • 打赏
  • 举报
回复
问题好多,我想问问,能不能将读进来的数据放在实参所在的指针中。在savefile中调用它 有什么不可以的呢!都是文件,只要正确的打开并读取到有效数据,然后写进文件就可以了的!
renshengxiaoqu 2013-09-22
  • 打赏
  • 举报
回复

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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