文档详情

在MFC应用程序中显示JPGGIF图像文件.doc

发布:2017-12-16约1.12万字共17页下载文档
文本预览下载声明
 如果你是一个使用Visual Basic编程的程序员,要在程序中显示JPG或者GIF图像简直易如反掌,将图像控件拖到Form中就可以了。但是C++程序员要显示同样格式的图像文件却没有那么轻松,那么是不是要自己编写JPG解压缩代码呢?当然不用那么复杂啦!本实例将针对这个问题讨论如何在MFC中显示JPG或者GIF格式的图像文件。   一、实现方法   用Visual Basic写图像显示程序之所以如此轻松,完全是利用了琳琅满目的图像处理控件,它们处理了显示图像文件的所有底层工作,而C++程序员为了实现相同的功能必须忙乎半天。其实,C/C++程序员也能使用那些Visual Basic程序员所用的(或者说几乎一样的)图像控件。Visual Basic用的图像控件实际上都是基于一个系统级的COM类--IPicture。下面是有关Ipicture类的方法描述:   get_Handle():返回图像对象的Windows GDI句柄;   get_Hpal():返回图像对象当前使用的调色板拷贝;   get_Type():返回当前图像对象的的图像类型;   get_Width():返回当前图像对象的图像宽度;   get_Height():返回当前图像对象的图像高度;   Render():在指定的位置、指定的设备上下文上绘制指定的图像部分;   set_Hpal():设置当前图像的调色板;   get_CurDC():返回当前选中这个图像的设备上下文;   SelectPicture():将一个位图图像选入给定的设备上下文,返回选中图像的设备上下文和图像的GDI句柄 ;   get_KeepOriginalForma():返回图像对象KeepOriginalFormat 属性的当前值;   put_KeepOriginalFormat():设置图像对象的KeepOriginalFormat 属性;   PictureChanged():通知图像对象它的图像资源改变了;   SaveAsFile():将图像数据存储到流中,格式与存成文件格式相同;   get_Attributes():返回图像位属性当前的设置;   从上面的方法可以看出,Ipicture类操纵着图像对象及其属性。图像对象提供对位图的抽象,而Windows负责BMP、JPG和GIF等格式的标准实现。程序员要做的只是实例化Ipicture类对象,然后调用其Render()函数。与通常使用接口的方式不同,这里实例的创建我们不用CoCreateInstance()函数,而是用一个专门的函数OleLoadPicture(),具体实现代码如下:   IStream* pstm = // 需要一个流(stream)   IPicture* pIPicture;   hr = OleLoadPicture(pstm, 0, FALSE, IID_IPicture, (void**)pIPicture);   OleLoadPicture()函数从数据流中加载图像并创建一个可用来显示图像的新IPicture对象。 rc = // 显示图像的矩形   IPicture 负责处理所有琐事,以便确定图形之格式,如 Windows 位图、JPEG或者GIF文件--甚至是图标和元文件(metafiles)。当然啦,所有这些的实现细节是需要技巧的,为此本实例写了一个Demo程序Myimgapp来示范这些IPicture的使用方法。Myimgapp是个典型的MFC文档/视图程序,在编写这个程序之前,首先对 IPicture COM接口进行封装,之所以要这么做,主要是考虑到并不是每一个程序员都能熟练运用COM接口进行编程,另外将IPicture的主要功能封装在C++类中可以使我们的问题更容易解决,封装的这个C++类名字叫做CPicture。它的定义和实现细节请参考本文提供的源代码。   本实例在这个类中将复杂而陌生的COM风格的参数映射成MFC程序员更为熟悉的类型。例如,CPicture可以让你直接从文件名加载一幅图像,CFile或者CArchive,而不用去处理流,CPicture::Render()替你完成了IPicture中所有令人讨厌的但又是必须的HIMETRIC平滑转换工作。CPicture甚至具备了一个Load()函数,它可以从资源数据中加载图像,所以你只要用下面的代码就可以显示资源中的图像:   CPicture pic(ID_MYPIC); // 加载图像   CRect rc(0,0,0,0); // 使用缺省的rc   pic.Render(pDC, rc); // 显示图像   CPicture::Render提供一个显示图片的矩形。IPicture 对图像进行延伸处理。如果传递一个
显示全部
相似文档