WPF显示动态GIF技巧分享

开发 开发工具
WPF显示动态GIF是一个比较新的技术,刚刚接触WPF开发工具的朋友对于这一方法的使用还是不太熟练的。希望大家可以充分掌握之一应用技巧。

WPF开发工具能够帮助我们实现许多基于图形界面显示的相关功能。在这里我们就先来了解一下有关WPF显示动态GIF的一些方法。#t#

在我们寻求帮助的时候,最不愿意听到的答复是:很抱歉,在当前版本的产品中还没有实现该功能... 在WPF中显示动态的GIF图像时便遇到了这样的问题,WPF中强大的Image控件却不支持动态的GIF(其只能显示***帧).当然,我们可以说WPF 强大的动画能力,让我们完全有理由抛弃传统的GIF动画,但如某种情况下如果你觉得使用动态的GIF更合适的话(比如QQ表情,因为GIF是利于保存和传输的),没关系,本篇随笔将帮助你解决这个问题.

1,曾有过的尝试:

我们在实际开发过程中也遇到WPF显示动态GIF的问题.发现普通的Image控件不能正常显示后,我们又发现网页浏览器却是可以的,以及 windows XP的"图片和传真查看器"也可以,但"Window Live照片库"却不可以.所以我们最初打算使用通过包装WebBrowseControl来实现,即是在WPF中host一个.net2.0中的浏览器控件,然后让该浏览器来实现图片,成功了,但麻烦的事情是鼠标右键可以点出网页的上下文菜单.

我们放弃了该方案,除了不愿意花时间来屏蔽上下文菜单和浏览器控件的多余功能外,同时我们的觉得浏览器控件过于"重量级",有点杀鸡用牛刀的感觉.另外,你可能会想到使用WPF中的Frame控件,但也会得到上述结果.另外,有网友说可以使用MediaElement控件,但大都没有成功,我也没有(可能是RP不够哈,呵呵...)

2,GifBitmapDecoder

我们发现WPF中有一个名为GifBitmapDecoder的类,其可以将WPF显示动态GIF分解成很多帧并保存在一个列表中,每一帧为一个BitmapFrame类型的对象,其父类为BitmapSource,这也就意味着,我们可以将每一帧赋值给一个Image控件的Source属性,这样我们可以得到针对GIF各帧的Image系列:

  1. GifBitmapDecoder decoder = 
    new GifBitmapDecoder( new Uri
    ("OH.gif",UriKind.Relative),
    BitmapCreateOptions.PreservePixel
    Format,BitmapCacheOption.Default);   
  2. foreach (BitmapFrame f in 
    decoder.Frames)   
  3. {   
  4. Image image = new Image(); 
    image.Source = f;  
  5. this.panel1.Children.Add(image);   

3,解析GIF

要解析文件就必须知道文件的存储结构,比如,得到帧的显示时间的方法是这样的:

 

  1. private   
  2. int ParseGraphicControlExtension
    (byte[] gifData, int offset)   
  3. {   
  4. int returnOffset = offset;   
  5. // Extension Block   
  6. int length = gifData[offset + 2];  
  7. returnOffset = offset + length + 2 + 1;  
  8. byte packedField = gifData[offset + 3];
     
    currentParseGifFrame.disposalMethod =
     (packedField & 0x1C) 
    >> 2;   
  9. // Get DelayTime   
  10. int delay = BitConverter.ToUInt16
    (gifData, offset + 4);   
  11. currentParseGifFrame.delayTime = delay;   
  12. while (gifData[returnOffset] != 0x00) 
    returnOffsetreturnOffset = 
    returnOffset + gifData[returnOffset] + 1;   
  13. } returnOffset++;   
  14. return returnOffset;   
  15. }  

以上就是对WPF显示动态GIF的相关方法的介绍。

责任编辑:曹凯 来源: IT168
相关推荐

2009-12-23 17:07:37

WPF性能

2009-12-24 09:38:27

WPF用户线程

2009-12-29 11:01:46

WPF淡入效果

2009-12-28 10:40:13

WPF调用Winfor

2009-12-25 10:11:46

WPF后台控制动画

2009-11-27 11:08:11

PHP动态网站开发

2009-11-30 11:10:12

PHP显示MySQL乱

2010-03-03 16:25:41

Python字符串显示

2010-01-14 16:04:32

VB.NET显示时间

2009-12-25 17:39:01

WPF验证

2009-07-16 13:50:28

AWT和Swing

2010-03-04 14:21:17

2009-12-25 09:44:52

WPF窗口设置

2009-12-23 15:16:52

WPF数据绑定

2009-12-28 15:01:39

WPF树应用

2009-12-28 11:14:29

WPF显示文本

2009-12-25 09:34:50

WPF显示HTML

2012-05-24 15:41:38

PHP

2009-12-23 10:46:38

WPF实现用户界面

2009-12-15 10:23:23

Ruby应用技巧
点赞
收藏

51CTO技术栈公众号