
VC6.0 MFC程序 Ipicture::getWidth(&m_width)时出现内存读写错误
错误图片如上。我用Ipicture来加载图片,代码如下CFilem_file("res\\123.png",CFile::modeRead);AfxMessageBox(...
错误图片如上。
我用Ipicture来加载图片,代码如下
CFile m_file("res\\123.png",CFile::modeRead );
AfxMessageBox("打开成功");
//获取文件长度
DWORD m_filelen = m_file.GetLength();
AfxMessageBox("获取长度成功");
//在堆上分配空间
HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen);
AfxMessageBox("分配内存成功");
LPVOID pvdata = NULL;
//锁定堆空间,获取指向堆空间的指针
pvdata = GlobalLock(m_hglobal);
//将文件数据读区到堆中
m_file.Read(pvdata,m_filelen);
AfxMessageBox("读取文件成功");
IStream* m_stream;
GlobalUnlock(m_hglobal);
//在堆中创建流对象
CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);
//利用流加载图像
OleLoadPicture(m_stream,m_filelen,TRUE,IID_IPicture,(LPVOID*)&m_picture);
AfxMessageBox("加载图像成功");
m_picture->get_Width(&m_width);
AfxMessageBox("获取宽度成功");
m_picture->get_Height(&m_height);
中间加消息框是为了判断在哪里出错了。最后出现“加载图像成功”后就出错了。所以我觉得是获取宽度哪里就不对。
另外,同样的程序在打开jpg格式的小图片的时候是成功的,上面我用来打开一张大图片就失败了。感觉可能是数据长度的问题,但又不知道怎么解决,求助。 展开
我用Ipicture来加载图片,代码如下
CFile m_file("res\\123.png",CFile::modeRead );
AfxMessageBox("打开成功");
//获取文件长度
DWORD m_filelen = m_file.GetLength();
AfxMessageBox("获取长度成功");
//在堆上分配空间
HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen);
AfxMessageBox("分配内存成功");
LPVOID pvdata = NULL;
//锁定堆空间,获取指向堆空间的指针
pvdata = GlobalLock(m_hglobal);
//将文件数据读区到堆中
m_file.Read(pvdata,m_filelen);
AfxMessageBox("读取文件成功");
IStream* m_stream;
GlobalUnlock(m_hglobal);
//在堆中创建流对象
CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);
//利用流加载图像
OleLoadPicture(m_stream,m_filelen,TRUE,IID_IPicture,(LPVOID*)&m_picture);
AfxMessageBox("加载图像成功");
m_picture->get_Width(&m_width);
AfxMessageBox("获取宽度成功");
m_picture->get_Height(&m_height);
中间加消息框是为了判断在哪里出错了。最后出现“加载图像成功”后就出错了。所以我觉得是获取宽度哪里就不对。
另外,同样的程序在打开jpg格式的小图片的时候是成功的,上面我用来打开一张大图片就失败了。感觉可能是数据长度的问题,但又不知道怎么解决,求助。 展开
1个回答
展开全部
这样添加消息框是不好查出错误的,在每一步获取值的时候都需要做判断,这个值是否获取正确。出现这样的错误最大可能是m_picture这个指针获取有误。

2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询