用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
2009-10-23 10:48
627 查看
用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
OleLoadPicture 函数实际上创建了一个IPicture类型的COM接口对象,然后我们可以通过这个COM接口来操作图片(实际上你也可以用API OleCreatePictureIndirect来加载图片,不过相比而言OleLoadPicture函数简化了基于流的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;
LE_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
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lanmanck/archive/2009/04/04/4048697.aspx
OleLoadPicture 函数实际上创建了一个IPicture类型的COM接口对象,然后我们可以通过这个COM接口来操作图片(实际上你也可以用API OleCreatePictureIndirect来加载图片,不过相比而言OleLoadPicture函数简化了基于流的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;
LE_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
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lanmanck/archive/2009/04/04/4048697.aspx
相关文章推荐
- 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 转载:用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 用API OleLoadPicture来加载JPG、GIF格式的图片
- win7(旗舰版)下,OleLoadPicture 加载内存中的图片(MagickGetImageBlob),返回值 < 0
- c++使用std_image.c来加载jpg,png,gif等格式图片
- 加载JPG / JPEG / GIF / PNG 格式的图片
- 加载多种图片格式(gif,jpg,png.bmp)
- 【VS开发】VC下加载JPG/GIF/PNG图片的两种方法
- gif | jpg | png图片格式及应用场景
- 转换一个JPG/GIF格式的图片到BITMAP位图格式.
- vc2003上加载Gif格式图片
- VC中加载GIF格式动态图片的详细方法!
- VC中加载GIF格式动态图片的详细方法!