VC6.0 MFC程序 Ipicture::getWidth(&m_width)时出现内存读写错误

错误图片如上。
我用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格式的小图片的时候是成功的,上面我用来打开一张大图片就失败了。感觉可能是数据长度的问题,但又不知道怎么解决,求助。

这样添加消息框是不好查出错误的,在每一步获取值的时候都需要做判断,这个值是否获取正确。出现这样的错误最大可能是m_picture这个指针获取有误。
温馨提示:内容为网友见解,仅供参考
无其他回答

VC6.0 MFC程序 Ipicture::getWidth(&m_width)时出现内存读写错误
这样添加消息框是不好查出错误的,在每一步获取值的时候都需要做判断,这个值是否获取正确。出现这样的错误最大可能是m_picture这个指针获取有误。

...MFC 在MFC中显示视频的程序if(inDlg.DoModal()==IDOK)这句中止,求...
这个错误的解决方法如下:修改如下设置:工程(Project)->属性(Properties)->配置属性(Configuration Properties)->c\/c++->代码生成(Code Generation)->运行时库(Use run-time library)->多线程调试DLL(\/MDd)(Multithreaded DLL\/Debug Multithreaded DLL)

在MFC中,如何读取外部的位图文件,让它显示在图片控件(Picture...
if(m_IPicture != NULL) \/\/ Do Not Try To Read From Memory That Is Not Exist... { m_IPicture->get_Height(&m_Height); m_IPicture->get_Width(&m_Width); \/\/ Calculate Its Size On a "Standard" (96 DPI) Device Context m_Height = MulDiv(m_Height, 96, HIMETRIC_INCH); m_Width...

求一个用VC6.0写的截图程序
BITMAP mbitmap;\/\/将位图信息填充到一个缓冲区内 bmprect.GetBitmap(&mbitmap);bmemDC.BitBlt(0,0,mbitmap.bmWidth,mbitmap.bmHeight,GetDC(),m_StartPoint.x,m_StartPoint.y,SRCCOPY);BITMAPINFOHEADER bih = {0};\/\/位图信息头 bih.biBitCount = mbitmap.bmBitsPixel;\/\/每个像素字节大...

在MFC中图片的读入并显示问题
CClientDC(this);CDC memDC;memDC.CreateCompatibleDC(pDC);memDC.SelectObject(&bitmap);\/\/to display BITMAP bitInfo;bitmap.GetObject(sizeof(bitInfo),&bitInfo);pDC->BitBlt(0,0,bitInfo.bmWidth,bitInfo.bmHeight,&memDC,0,0,SRCCOPY);CView::OnLButtonDblClk(nFlags, point);} ...

如何在vc中实现jpeg文件的显示和exif的读取?(代码)
由于该函数有时会导致失败,所以应当用SUCCEEDED宏来做一些适当的保护工作,只有在数据装载成功的前提下才能继续下面的图像显示工作:if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))){ OLE_XSIZE_HIMETRIC hmWidth; OLE_YSIZE_HIMETRIC hmHeight; pPic->get_Width(&hmW...

怎么用vc6.0画图
\/* 关闭绘图屏幕*\/ 说明:1. 创建的绘图屏幕640x480,表示横向有640个点,纵向有480个点。注意:左上角是原点(0,0),也就是说,y轴和数学的y轴是相反的。2. getch实现按任意键功能,按任意键后,程序继续执行。否则,程序会立刻执行closegraph以至于看不到绘制的内容。

MFC 实时视频延迟较高
因为操作系统要遍历空闲内存列表,查找符合尺寸的内存块,在这过程中,可能需要进行小块内存的合并、移动操作。我建议直接使用传进来的video_data数据块进行绘制就可以了,没有必要进行内存拷贝,将图片数据绘制到static控件上后,再释放video_data指针指向的数据块,这样就不会发生内存泄露了!

VC++如何读取并显示JPG文件
Graphics mGraphics( dc.GetSafeHdc() );\/\/装入图像文件 Image img( L".\/res\/test.jpg", TRUE );\/\/在指定区域pdestPoints显示图像 (根据背景大小按比例缩放)CRect rcClient;GetClientRect( &rcClient );BOOL bWidth = rcClient.Width() \/ img.GetWidth() > rcClient.Height() \/ img.Get...

MFC中如何在Dialog中显示一张jpg图片?
IPicture *pPic;\/\/load image from file stream if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))){ OLE_XSIZE_HIMETRIC hmWidth;OLE_YSIZE_HIMETRIC hmHeight;pPic->get_Width(&hmWidth);pPic->get_Height(&hmHeight);double fX,fY;\/\/get image height...

相似回答