IPicture中的装载图片OleLoadPicture失败
我从内存中读取一个已存好的图片,然后在OnPaint中调用下面的IPicture方法,返回出错,代码如下
[解决办法]
/*
*如下代码段实现的功能是从指定的路径中读取图片,并显示出来
*/
void DisplayImage(HDC hDC, LPCTSTR szImagePath)
{
HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //从指定的路径szImagePath中读取文件句柄
DWORD dwFileSize=GetFileSize(hFile, NULL); //获得图片文件的大小,用来分配全局内存
HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给图片分配全局内存
void *pImageMemory=GlobalLock(hImageMemory); //锁定内存
DWORD dwReadedSize; //保存实际读取的文件大小
ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //读取图片到全局内存当中
GlobalUnlock(hImageMemory); //解锁内存
CloseHandle(hFile); //关闭文件句柄
IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象
CreateStreamOnHGlobal(hImageMemory, false, &pIStream) //用全局内存初使化IStream接口指针
OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针
//得到IPicture COM接口对象后,你就可以进行获得图片信息、显示图片等操作
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pIPicture->get_Width(&hmWidth); //用接口方法获得图片的宽和高
pIPicture->get_Height(&hmHeight);
pIPicture->Render(hDC,0,0,100,100,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上绘出图片
GlobalFree(hImageMemory); //释放全局内存
pIStream->Release(); //释放pIStream
pIPicture->Release(); //释放pIPicture
}
[解决办法]
CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);
改为
CreateStreamOnHGlobal(pData,FALSE,&m_pStream);
[解决办法]
第一步:检查参考CreateStreamOnHGlobal用法,检查下该函数的返回值
并根据返回值检查下问题所在
[解决办法]
一共能影响的代码就那么几句
同意楼上的先看看CreateStreamOnHGlobal
WINOLEAPI CreateStreamOnHGlobal(
HGLOBAL hGlobal, //Memory handle for the stream object
BOOL fDeleteOnRelease, //Whether to free memory when the object is released LPSTREAM *ppstm //Address of output variable that receives the IStream interface pointer );
如果函数创建流对象成功则返回S_OK。
[解决办法]
检查下函数的OleLoadPicture返回值
This function OleLoadPicture returns S_OK on success. Other possible values include the following.
Return code Description
E_NOINTERFACE The object does not support the specified interface.
E_POINTER The stream is not valid. For example, it may be NULL.
[解决办法]
http://social.msdn.microsoft.com/search/zh-CN?query=OleLoadPicture
这里面的你看看,说不定能帮你解决
[解决办法]
有可能抓取图片到内存中出现了问题
先测试下把抓取的图片保存成bmp文件,这个bmp文件能打开吗?
[解决办法]
http://blog.csdn.net/robertbaker/article/details/4136888