`
lovnet
  • 浏览: 6878838 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持。图像对象的主要接口是IPicture和IPictureDisp。IPictureDisp从IDispatch继承,提供了通过自动化访问图片属性的能力。图片对象可通过OleCreatePictureIndirect创建。关于IPicture支持的其他接口和方法可以看MSDN,一般创建图片对象可以用OleLoadPicture函数,它简化了基于流内容创建图片对象。下面的代码中有两个未定义的变量是FilePath和hDC。
//FilePath是从外部传入的图片路径
//打开文件
HANDLE hFile = CreateFile(FilePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
_ASSERTE(INVALID_HANDLE_VALUE != hFile);
//取文件大小
DWORD dwFileSize = GetFileSize(hFile, NULL);
_ASSERTE(-1 != dwFileSize);
LPVOID pvData = NULL;
//分配内存,准备读入图片文件的数据
//GlobalAlloc从堆分配指定字节的内存区域
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
_ASSERTE(NULL != hGlobal);
//GlobalLock函数锁住一个全局的内存对象同时返回一个指向对象首字节的指针
pvData = GlobalLock(hGlobal);
_ASSERTE(NULL != pvData);
DWORD dwBytesRead = 0;
//读取文件的数据到分配的全局内存
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
_ASSERTE(FALSE != bRead);
GlobalUnlock(hGlobal);
CloseHandle(hFile);

//到此,我们已经把文件的数据读到了内存当中

LPSTREAM pstm = NULL;
//从全局内存创建IStream接口指针
HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
_ASSERTE(SUCCEEDED(hr) && pstm);
//根据图片文件创建IPicture接口指针
hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
_ASSERTE(SUCCEEDED(hr) && gpPicture);
pstm->Release();

//至此,IPicture接口建立好,下面开始画图片
//hDC是外部传入的画图设备
long hmWidth;
long hmHeight;
gpPicture->get_Width(&hmWidth);
gpPicture->get_Height(&hmHeight);
//转换himetric距离为pixels距离,1英寸=25.4毫米
int nWidth = MulDiv(hmWidth, GetDeviceCaps(hDC, LOGPIXELSX), 2540);
int nHeight = MulDiv(hmHeight, GetDeviceCaps(hDC, LOGPIXELSY), 2540);
RECT rc;
GetClientRect(hWnd, &rc);
//IPicture::Render显示图片
gpPicture->Render(hDC, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, &rc);

分享到:
评论

相关推荐

    ipicture接口方式实现图片显示

    在Windows编程中,`...总之,`IPicture`接口为Windows开发提供了方便的图片显示方案,通过这个接口,我们可以轻松地在应用程序中集成不同格式的图像。通过适当的方法调用和错误处理,可以确保程序的稳定性和兼容性。

    ShowPicture.rar_IPicture_图片显示

    // 使用IPicture接口进行图片显示 // ... 这里添加显示代码 // 清理 pPicture->Release(); CoUninitialize(); } ``` `OleLoadPicture`函数用于从文件中加载图片并返回一个`IPicture`接口指针。加载成功后,你...

    visual c++ MFC中显示JPG图片,GIF动画图片_IPicture_COM接口.zip

    1. **加载图片**: 使用`IPicture`接口,我们可以加载JPG或GIF文件。这通常通过`CoCreateInstance`函数实现,传入`CLSID_Picture`作为类ID,创建一个`IPicture`实例。之后,调用`Load`方法读取文件内容。 2. **...

    vc 动态加载显示jpg、bmp图片

    本篇文章将详细讲解如何利用IPicture接口来实现这一功能,同时也会涉及到一些基本的图像处理知识。 IPicture是Microsoft OLE(Object Linking and Embedding)库中的一个接口,它允许程序在运行时加载和显示各种...

    vc动态加载显示本地jpg/jpeg/bmp图片

    对于其他类型的图像控件,如CImageList或CDC,也可以通过类似的方式利用IPicture接口进行操作,只是具体方法可能会有所不同。 总结起来,利用VC++的IPicture接口动态加载本地jpg、jpeg和bmp图片,涉及到的关键步骤...

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

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

    ipicture图片播放程序

    这个程序的核心在于IPICTURE接口,它是Windows API中用于处理图像对象的主要接口之一。通过这个接口,开发者可以实现如加载、显示、保存、缩放、旋转等多种图片操作。IPICTURE支持多种图片格式,包括但不限于BMP、...

    MFC jpg图片显示问题

    第二种方法是使用 IPicture 接口加载图片。这种方法也可以加载 JPG 图片,并且可以获取图片的宽高和其他信息。下面是一个使用 IPicture 接口加载 JPG 图片的示例代码: ```c IPicture *m_picture; OLE_XSIZE_...

    MFC使用IPicture显示多种格式的图像

    在Windows编程环境中,MFC(Microsoft Foundation ...通过以上步骤,你可以在MFC应用中灵活地显示多种格式的图像,同时利用IPicture提供的功能进行图像操作。这不仅简化了代码,也提高了程序的兼容性和可维护性。

    IPicture封装类

    总的来说,`IPicture`封装类和COM加载图片的技术提供了一种高效且兼容性好的图像处理方式,尤其适合Windows平台下的开发。通过理解和熟练使用这种技术,开发者可以更好地控制和优化应用程序的图像处理性能。

    对IPicture进行封装的CPicture

    在实际应用中,开发者可以使用`CPicture`类来加载和显示图片,而无需直接与复杂的COM接口打交道。例如,加载位图文件时,可以先创建一个`IPicture`对象,然后通过这个对象创建`CPicture`实例,之后就可以利用`...

    用VC++实现数据库中图片的存取与显示

    同时,利用`IPicture`接口可以便捷地处理多种格式的图片显示问题,并通过控件自画的方法解决图片显示的刷新问题。这些技术和方法不仅可以应用于VC++,其原理同样适用于其他编程语言,只需要适配相应的语法即可。

    本地图片加载到对话框上

    4. **加载图片**:使用`OleLoadPicture`或`OleLoadPicturePath`函数加载图片到`IPicture`接口。其中,`OleLoadPicturePath`函数可以简化步骤,直接从文件路径加载图片。 5. **获取图片尺寸**:通过调用`get_Width`...

    如何在VC中显示动态的GIF.pdf

    这可以通过遍历GIF文件的字节流,找到每个图像块的起始位置和大小,然后将这些图像数据应用到IPicture接口加载的第一帧图像上。这样,通过连续渲染每一帧,就可以实现动态效果。 以下是一个简单的步骤概述: 1. ...

    基于VC的USB描述符显示实现

    通过使用IPicture接口,可以避免依赖特定的ActiveX控件,简化了图片显示的过程,提高了代码的通用性和效率。 **显示原理**:IPicture接口支持IPropertyNotifySink和IPersistStream等接口,前者允许在图像属性改变时...

    加入JPG图片1陈.docx

    总的来说,这段代码展示了如何在MFC应用程序中利用COM接口加载和显示JPEG图片,以及如何通过调整`Render`方法参数来适应视图的大小。这对于开发需要动态加载和展示图像的应用程序非常有用。通过扩展这个基础,你可以...

    ImageIden简易图像浏览并显示,类似ACDsee

    在VC++中,IPicture接口通常用于处理图形数据,如读取和显示图片。它的主要方法有LoadPicture,用于从文件加载图像,以及Draw,用于在设备上下文中绘制图像。IPicture类的使用使得程序能够轻松地处理不同类型的图像...

    从网页上获取图片显示到Picture中的软件源码

    这里的关键API是`OleLoadPicture`函数,它可以从指定的URL加载图片,并返回一个`IPicture`接口对象。 ```vb Private Declare Function OleLoadPicture Lib "oleaut32.dll" (ByVal szURLorPath As Long, ByVal ...

    显示JPG和GIF图片的简单方法

    总之,这个简单的VC++代码展示了如何利用COM接口和系统API来显示JPG和GIF图片,为开发者提供了一种基础的图像显示方案。在实际项目中,可能还需要考虑错误处理、内存管理、以及兼容更多图像格式等问题。

    显示BMP的例子,来自codeguru

    这个例子是关于如何在程序中显示BMP图像的,主要利用了Windows API中的`IPicture`接口。`IPicture`接口是Microsoft OLE(Object Linking and Embedding)的一部分,它允许程序处理图形对象,包括BMP、JPEG、GIF等...

Global site tag (gtag.js) - Google Analytics