使用IPicture接口显示图片

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

以下代码使用IPicture接口显示图片,可直接放于OnDraw函数中。

IPictrue接口支持BMP、DIB、EMF、GIF、ICO、JPG、WMF格式图片的显示,但只能保存BMP和ICO格式的图片。

// pDoc为文档对象指针
// pDC为设备描述表指针

::CoInitialize(NULL);  
// COM 初始化
HRESULT hr;
CFile file;

file.Open(pDoc
->GetPathName(), CFile::modeRead | CFile::shareDenyNone );  // 读入文件内容
DWORD dwSize = file.GetLength();
HGLOBAL hMem 
= ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf 
= ::GlobalLock( hMem );
file.ReadHuge( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem );

IStream 
* pStream = NULL;
IPicture 
* pPicture = NULL;

// 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT ( SUCCEEDED(hr) );

hr 
= ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
ASSERT(hr
==S_OK);

long nWidth,nHeight;  // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
pPicture->get_Width( &nWidth );    // 宽
pPicture->get_Height( &nHeight );  // 高

CRect rect;
GetClientRect(
&rect);

CSize sz( nWidth, nHeight );
pDC
->HIMETRICtoDP( &sz );  // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
long x, y, cx, cy;

// 原始大小
/*

cx = sz.cx;
cy = sz.cy;
x = rect.Width() / 2 - cx / 2;
y = rect.Height() / 2 - cy / 2;
*/

// 自动适应窗口
double fRatePic, fRateWnd;
fRatePic 
= (double)sz.cx / (double)sz.cy;
fRateWnd 
= (double)rect.Width() / (double)rect.Height();
if (fRatePic > fRateWnd)
{
    cx 
= rect.Width();
    cy 
= (long)(rect.Width() / fRatePic);
}
else
{
    cx 
= (long)(rect.Height() * fRatePic);
    cy 
= rect.Height();
}
if (cx == rect.Width())
{
    x 
= 0;
    y 
= rect.Height() / 2 - cy / 2;
}
if (cy == rect.Height())
{
    x 
= rect.Width() / 2 - cx / 2;
    y 
= 0;
}

pPicture
->Render(pDC->m_hDC, x, y, cx, cy,
    
0, nHeight, nWidth, -nHeight, NULL);

if ( pPicture ) pPicture->Release();// 释放 IPicture 指针
if ( pStream ) pStream->Release();  // 释放 IStream 指针,同时释放了 hMem

::CoUninitialize();


在MFC中利用IPicture接口----实现图片显示 在VC++上显示图片的具体思路是将jpeg、bmp文件加载到堆中,然后在堆中创建一个数据流,接着调用OleLoadPicture函数加载流中的数据到IPicture中,最后调用IPicture接口的Reader方法输出图像信息。 一、 具体操作如下: 1. 创建单文档MFC应用程序,工程名为ShowJPEG. 2. 向视图类中添加成员变量。 IStream* m_pSt 阅读详情

相关推荐

MFC ActiveX控件实现图片在网页的显示

使用visual studio2010 制作MFC ActiveX控件,结合visual control pad 实现图片显示

VC显示JPEG、GIF图像的简便方法_IPicture_COM接口

visual c++ VC调用JPEG、GIF图像的简便方法_IPicture_COM接口

IPicture 显示图片

使用 Windows IPicture 接口显示图片的类。谁用谁知道!要记得评价哦!

IPicture总结

1、IPicture接口对象的创建          方法1:直接通过文件创建 LPCSTR szFileUrl;  IPicture *pIPicture;  OleLoadPicturePath(CComBSTR(szFileUrl),     (LPUNKNOWN)NULL,     0,     0,     IID_IPicture,    (LPVOID*)&pIPi

jiangqin115的专栏 2313

IPicture使用代码

1、IPicture接口对象的创建          方法1:直接通过文件创建 LPCSTR szFileUrl;  IPicture *pIPicture;  OleLoadPicturePath(CComBSTR(szFileUrl),     (LPUNKNOWN)NULL,     0,     0,     IID_IPicture,    (LPVOID*)&pIPi

ccx_john的专栏 915

利用IPicture接口加载、显示图片

IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持。图像对象的主要接口IPictureIPictureDisp。IPictureDisp从IDispatch继承,提供了通过自动化访问图片属性的能力。图片对象可通过OleCreatePictureIndirect创建。关于IPicture支持的其他接口和方法可以看MSD...

weixin_34014555的博客 220

使用COM组件的IPicture接口---实现图片显示

mfc 中 显示位图容易  但是显示JPG等格式却比较麻烦, 在此使用IPicture接口可以很方便的显示bmp,jpg,gif等格式图片 , 但此接口不支持tif  png格式的图片。   void ShowImage(CString str) { CclientDC dc(this); IPicture * pImg; IStream * pStm; CFileStatus

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 3300

C使用IPicture显示网上图片(通过URL指定)

C使用IPicture显示网上图片(通过URL指定)博客分类:桌面程序(VC、Dephi、.Net)VC++MFC编程Windows数据结构/************************************************************/VC IPicture显示网络图片 显示远程图片 显示URL指定的图片 通过HTTP下载显示图片 显示网上广告图片上面是我罗列的关键

自学C++,会写HelloWorld 899

IPicture使用总结

1、IPicture接口对象的创建 方法1:直接通过文件创建LPCSTR szFileUrl;IPicture *pIPicture;OleLoadPicturePath(CComBSTR(szFileUrl), (LPUNKNOWN)NULL, 0, 0, IID_IPicture, (LPVOID*)&pIPicture))...

weixin_30458043的博客 139

ipicture接口方式实现图片显示

ipicture方式实现图片显示,测试了bmp格式、gif格式和jpg格式均成功

自己封装的加载、显示图片的类C++(有demo)

利用IPicture接口加载、显示图片,可加载jpg、bmp、png等图片,gif图片显示第一帧。将所有操作封装为CPicture类,定义变量后,使用LoadPicture即可载入图片使用ShowPicture显示图片到指定位置。 并附上demo,工程为vs2008创建,类本身vs所有版本通用

IPicture

1、利用IPicture接口加载、显示图片 IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持。图像对象的主要接口IPictureIPictureDisp。IPictureDisp从IDispatch继承,提供了通过自动化访问图片属性的能力。图片对象可通过OleCreatePictureIndirect创建。关于I

yangxkl的专栏 7639

如何在WINCE5.0下显示图片

 VC下可以使用 IPicture接口来实现图片显示及放大缩小等功能,具体实现代码: BOOL LoadPic(char* picName,HDC hdc,DWORD l, DWORD t,DWORD w, DWORD h)   {   IPicture *pPic;IStream *pStm;CFileStatus fstatus;CFile file;LONG cb;i

zhouzhenli的专栏 560
上一篇: 枚举复合文件的存储结构
下一篇: JavaScript中常用的55个经典技巧
junchieh
博客等级 码龄20年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值