图一为该程序中读取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
跪求大神指导!!