当前位置:首页 > Windows程序 > 正文

win7(旗舰版)下,OleLoadPicture 加载内存中的图片(MagickGetImageBlob),返回值 0

2021-05-25 Windows程序

昨天去三哥家,想把拍好的照片缩小一下,我用很久前写的一个软件进行缩小,然后进行一次效果预览,这个时候弹出: 

Call OleLoadPicture Fail - loadPictureFromMW

奇怪,这个图片批量处理软件我一直在用,在 xp系统下从来没出现过这样的提示,为什么在 win7下无法正常进行图片的效果预览?

更让我接受不了的是,从来没有用户或朋友向我反应这个问题,难道他们都不用 win7?

今天下午问了一个朋友借了台win7的笔记本,通过一下午的测试,,解决了这个问题。

之前的代码思路:

通过 PBYTE pData =MagickGetImageBlob(MagickWand *, size_t length) 获取一张图片在内存中的指针和长度。

if(CreateStreamOnHGlobal(pData, FALSE, &pstream) == S_OK) //将字节数组转换成 IStream*  {                if(SUCCEEDED(OleLoadPicture(pstream, length, TRUE, &IID_IPicture, (void**)&pPic)))

这个代码在 xp下运行一切正常,可以正常加载 pData 指向的图片数据。

但在 win7奇旗舰版下, OleLoadPicture(....) 返回值 < 0

搞了2个小时也没找到解决办法,这个时候我想起 OleLoadPicture 加载文件的时候先根据文件大小分配一个内存空间,然后加载文件到指定的内存空间:

HANDLE FileHandle;     ULONG SizeH, SizeL, ReadCount;     IStream *pstream = NULL;     //IPicture *pPic = NULL;         FileHandle = CreateFile(pFilePath,                             GENERIC_READ,                             FILE_SHARE_READ,                             NULL,                             OPEN_EXISTING,                             FILE_ATTRIBUTE_NORMAL, NULL                            );         if(FileHandle == INVALID_HANDLE_VALUE)         return;         SizeL = GetFileSize(FileHandle, &SizeH);         HGLOBAL pBuffer = GlobalAlloc(GMEM_MOVEABLE, SizeL);         if(pBuffer == NULL)     {         CloseHandle(FileHandle);         return;     }         LPVOID pDes = GlobalLock(pBuffer);         if(ReadFile(FileHandle, pDes, SizeL, &ReadCount, NULL) == 0)     {         GlobalUnlock(pBuffer);         CloseHandle(FileHandle);             GlobalFree(pBuffer); //释放全局内存             return;     }         GlobalUnlock(pBuffer);     CloseHandle(FileHandle);         if(CreateStreamOnHGlobal(pBuffer, TRUE, &pstream) != S_OK)     {         GlobalFree(pBuffer); //释放全局内存         return;     }         if(SUCCEEDED(OleLoadPicture(pstream, SizeL, TRUE, &IID_IPicture, (void**)&pPic)))     {

由于 pData是通过MagickGetImageBlob()获取的图片数据指针, 会不会是 OleLoadPicture 无法加载指向 pData的图片数据呢?

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70763.html