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);
分享到:
相关推荐
在Windows编程中,`...总之,`IPicture`接口为Windows开发提供了方便的图片显示方案,通过这个接口,我们可以轻松地在应用程序中集成不同格式的图像。通过适当的方法调用和错误处理,可以确保程序的稳定性和兼容性。
// 使用IPicture接口进行图片显示 // ... 这里添加显示代码 // 清理 pPicture->Release(); CoUninitialize(); } ``` `OleLoadPicture`函数用于从文件中加载图片并返回一个`IPicture`接口指针。加载成功后,你...
1. **加载图片**: 使用`IPicture`接口,我们可以加载JPG或GIF文件。这通常通过`CoCreateInstance`函数实现,传入`CLSID_Picture`作为类ID,创建一个`IPicture`实例。之后,调用`Load`方法读取文件内容。 2. **...
本篇文章将详细讲解如何利用IPicture接口来实现这一功能,同时也会涉及到一些基本的图像处理知识。 IPicture是Microsoft OLE(Object Linking and Embedding)库中的一个接口,它允许程序在运行时加载和显示各种...
对于其他类型的图像控件,如CImageList或CDC,也可以通过类似的方式利用IPicture接口进行操作,只是具体方法可能会有所不同。 总结起来,利用VC++的IPicture接口动态加载本地jpg、jpeg和bmp图片,涉及到的关键步骤...
利用IPicture接口加载、显示图片,可加载jpg、bmp、png等图片,gif图片显示第一帧。将所有操作封装为CPicture类,定义变量后,使用LoadPicture即可载入图片,使用ShowPicture显示图片到指定位置。 并附上demo,工程...
这个程序的核心在于IPICTURE接口,它是Windows API中用于处理图像对象的主要接口之一。通过这个接口,开发者可以实现如加载、显示、保存、缩放、旋转等多种图片操作。IPICTURE支持多种图片格式,包括但不限于BMP、...
第二种方法是使用 IPicture 接口加载图片。这种方法也可以加载 JPG 图片,并且可以获取图片的宽高和其他信息。下面是一个使用 IPicture 接口加载 JPG 图片的示例代码: ```c IPicture *m_picture; OLE_XSIZE_...
在Windows编程环境中,MFC(Microsoft Foundation ...通过以上步骤,你可以在MFC应用中灵活地显示多种格式的图像,同时利用IPicture提供的功能进行图像操作。这不仅简化了代码,也提高了程序的兼容性和可维护性。
总的来说,`IPicture`封装类和COM加载图片的技术提供了一种高效且兼容性好的图像处理方式,尤其适合Windows平台下的开发。通过理解和熟练使用这种技术,开发者可以更好地控制和优化应用程序的图像处理性能。
在实际应用中,开发者可以使用`CPicture`类来加载和显示图片,而无需直接与复杂的COM接口打交道。例如,加载位图文件时,可以先创建一个`IPicture`对象,然后通过这个对象创建`CPicture`实例,之后就可以利用`...
同时,利用`IPicture`接口可以便捷地处理多种格式的图片显示问题,并通过控件自画的方法解决图片显示的刷新问题。这些技术和方法不仅可以应用于VC++,其原理同样适用于其他编程语言,只需要适配相应的语法即可。
4. **加载图片**:使用`OleLoadPicture`或`OleLoadPicturePath`函数加载图片到`IPicture`接口。其中,`OleLoadPicturePath`函数可以简化步骤,直接从文件路径加载图片。 5. **获取图片尺寸**:通过调用`get_Width`...
这可以通过遍历GIF文件的字节流,找到每个图像块的起始位置和大小,然后将这些图像数据应用到IPicture接口加载的第一帧图像上。这样,通过连续渲染每一帧,就可以实现动态效果。 以下是一个简单的步骤概述: 1. ...
通过使用IPicture接口,可以避免依赖特定的ActiveX控件,简化了图片显示的过程,提高了代码的通用性和效率。 **显示原理**:IPicture接口支持IPropertyNotifySink和IPersistStream等接口,前者允许在图像属性改变时...
总的来说,这段代码展示了如何在MFC应用程序中利用COM接口加载和显示JPEG图片,以及如何通过调整`Render`方法参数来适应视图的大小。这对于开发需要动态加载和展示图像的应用程序非常有用。通过扩展这个基础,你可以...
在VC++中,IPicture接口通常用于处理图形数据,如读取和显示图片。它的主要方法有LoadPicture,用于从文件加载图像,以及Draw,用于在设备上下文中绘制图像。IPicture类的使用使得程序能够轻松地处理不同类型的图像...
这里的关键API是`OleLoadPicture`函数,它可以从指定的URL加载图片,并返回一个`IPicture`接口对象。 ```vb Private Declare Function OleLoadPicture Lib "oleaut32.dll" (ByVal szURLorPath As Long, ByVal ...
总之,这个简单的VC++代码展示了如何利用COM接口和系统API来显示JPG和GIF图片,为开发者提供了一种基础的图像显示方案。在实际项目中,可能还需要考虑错误处理、内存管理、以及兼容更多图像格式等问题。
这个例子是关于如何在程序中显示BMP图像的,主要利用了Windows API中的`IPicture`接口。`IPicture`接口是Microsoft OLE(Object Linking and Embedding)的一部分,它允许程序处理图形对象,包括BMP、JPEG、GIF等...