使用Imaging组件加载GIF动画

     Mobil手机加载GIF动态图像的方法有两种,一个就是使用GIF89a标准算法,另一个就是使用SDK自带的Imaging组件,这两种方法是很典型的手机图像处理技术的实践。使用Imaging组件加载GIF比使用标准算法处理高效的多,特别是在处理真彩GIF动画表现更加突出。

     Imaging组件中封装了对大部分图片格式的编解码算法,并以接口的形式提供给开发人员使用。Imaging组件是GDI+的微缩版。但是在实际使用上又有很大的不同。使用Imaging组件来加载GIF动态图片调用了几乎所有的Imaging接口,看看我们将要用到的接口:

IImagingFactory:图像操作最初要用到的接口,它的接口方法全是带CreateXXX的函数,可见他的制造工厂的特性。使用前需要调用CoCreateInstance初始化。

IImageDecoder:主要的图像操作接口,用来处理从大部分图像格式中获取数据。

IbitmapImage:主要的图位操作接口,这里能够对具体的图像像素进行运算。

IImage:主要的图形控制接口,也许是Imaging组件唯一的绘制接口

IImageSink:这个东东似乎是一个过渡性质的接口,它的亮点在它的sink的动词解释上:沉!

     操作:

     首先我们要使用IImagingFactory的CreateImageDecoderppy初始化IimageDecoder。使用这个方法取得GIF图像数据,用IimagingFactoryCreateNewBitmap初始化IbitmapImage。通过这个接口执行QueryInterface取得IImageIimageSink,然后调用IimageDecoderSelectActiveFrame设定当前的图像块数据。此时对获得的IimageSink进行decode,decode完毕后调用Iimage接口的draw方法,此时画出的就是指定的那个图像块图像。

     部分代码:

     文件到流的转化

Code

 

     文件加载

 Code

     在定时器中执行下面代码,不仅实现了GIF动画的播放,还支持透明GIF动画的播放

     Draw(HDC hDC,HWND hWnd,int XDest,int YDest)方法 

Code

 

你可能感兴趣的:(gif)