LegendFateX 2018-04-24 02:40 采纳率: 0%
浏览 1247
已结题

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

图一为该程序中读取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条回答

  • cxh194311 2018-04-24 02:56
    关注

    这个地方的内存是不是有问题

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?