LegendFateX
LegendFateX
2018-04-24 02:40

用mfc编写数字图像处理程序读取BMP图像时出现问题

10
  • 图片
  • bmp
  • 图像处理
  • mfc

图一为该程序中读取BMP的代码图片说明
BOOL CImageDoc::ReadBMP(LPCTSTR lpszPathName)
{
long lTotal = 0;
CFile file;
file.Open(lpszPathName, CFile::modeRead);
file.Read(&bmpFH, sizeof(BITMAPFILEHEADER));
lpbmi = (LPBITMAPINFO)new char[sizeof(BITMAPINFO) + 4 * (1 << 8)];
file.Read(lpbmi, sizeof(BITMAPINFOHEADER));
m_nColorBits = lpbmi->bmiHeader.biBitCount;
imageHeight = lpbmi->bmiHeader.biHeight;
imageWidth = lpbmi->bmiHeader.biWidth;

if (m_nColorBits == 8)
{
    lTotal = imageWidth * imageHeight;
    file.Read(&(lpbmi->bmiColors[0]), 256 * 4);
}
else if (m_nColorBits == 24)
{
    lTotal = imageWidth * imageHeight * 3;
}
else
{
    file.Close();
    return FALSE;
}
m_pBits = new unsigned char[lTotal];
file.Read(m_pBits, lTotal);
file.Close();
return TRUE;

}
图二为该程序中保存BMP的代码图片说明
BOOL CLufangxiaoImageDoc::SaveBMP(LPCTSTR lpszPathName)
{
long lTotal = 0;
CFile file;
file.Open(lpszPathName, CFile::modeCreate | CFile::modeReadWrite);
file.Write(&bmpFH, sizeof(BITMAPFILEHEADER));
file.Write(lpbmi, sizeof(BITMAPINFOHEADER));
if (m_nColorBits == 8)
{
lTotal = imageWidth * imageHeight;
file.Write(&(lpbmi->bmiColors[0]), 256 * 4);
}
else if (m_nColorBits == 24)
{
lTotal = imageWidth * imageHeight * 3;
}
else
{
file.Close();
return FALSE;
}
file.Write(m_pBits, lTotal);
file.Close();
return TRUE;
}
保存图像之后出现无法打开的情况
图三和图四为对图像实现操作的代码,只要运行到有pDoc->image的位置就会报错,提示pDoc->image是nullptr
图片说明图片说明
跪求大神指导!!

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

5条回答