自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

WPF顯示動態(tài)GIF技巧分享

開發(fā) 開發(fā)工具
WPF顯示動態(tài)GIF是一個比較新的技術(shù),剛剛接觸WPF開發(fā)工具的朋友對于這一方法的使用還是不太熟練的。希望大家可以充分掌握之一應(yīng)用技巧。

WPF開發(fā)工具能夠幫助我們實現(xiàn)許多基于圖形界面顯示的相關(guān)功能。在這里我們就先來了解一下有關(guān)WPF顯示動態(tài)GIF的一些方法。#t#

在我們尋求幫助的時候,最不愿意聽到的答復(fù)是:很抱歉,在當(dāng)前版本的產(chǎn)品中還沒有實現(xiàn)該功能... 在WPF中顯示動態(tài)的GIF圖像時便遇到了這樣的問題,WPF中強大的Image控件卻不支持動態(tài)的GIF(其只能顯示***幀).當(dāng)然,我們可以說WPF 強大的動畫能力,讓我們完全有理由拋棄傳統(tǒng)的GIF動畫,但如某種情況下如果你覺得使用動態(tài)的GIF更合適的話(比如QQ表情,因為GIF是利于保存和傳輸?shù)?,沒關(guān)系,本篇隨筆將幫助你解決這個問題.

1,曾有過的嘗試:

我們在實際開發(fā)過程中也遇到WPF顯示動態(tài)GIF的問題.發(fā)現(xiàn)普通的Image控件不能正常顯示后,我們又發(fā)現(xiàn)網(wǎng)頁瀏覽器卻是可以的,以及 windows XP的"圖片和傳真查看器"也可以,但"Window Live照片庫"卻不可以.所以我們最初打算使用通過包裝WebBrowseControl來實現(xiàn),即是在WPF中host一個.net2.0中的瀏覽器控件,然后讓該瀏覽器來實現(xiàn)圖片,成功了,但麻煩的事情是鼠標(biāo)右鍵可以點出網(wǎng)頁的上下文菜單.

我們放棄了該方案,除了不愿意花時間來屏蔽上下文菜單和瀏覽器控件的多余功能外,同時我們的覺得瀏覽器控件過于"重量級",有點殺雞用牛刀的感覺.另外,你可能會想到使用WPF中的Frame控件,但也會得到上述結(jié)果.另外,有網(wǎng)友說可以使用MediaElement控件,但大都沒有成功,我也沒有(可能是RP不夠哈,呵呵...)

2,GifBitmapDecoder

我們發(fā)現(xiàn)WPF中有一個名為GifBitmapDecoder的類,其可以將WPF顯示動態(tài)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

要解析文件就必須知道文件的存儲結(jié)構(gòu),比如,得到幀的顯示時間的方法是這樣的:

 

  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顯示動態(tài)GIF的相關(guān)方法的介紹。

責(zé)任編輯:曹凱 來源: IT168
相關(guān)推薦

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調(diào)用Winfor

2009-12-25 10:11:46

WPF后臺控制動畫

2009-11-27 11:08:11

PHP動態(tài)網(wǎng)站開發(fā)

2009-12-25 17:39:01

WPF驗證

2010-03-03 16:25:41

Python字符串顯示

2009-11-30 11:10:12

PHP顯示MySQL亂

2010-01-14 16:04:32

VB.NET顯示時間

2010-03-04 14:21:17

2009-12-25 09:44:52

WPF窗口設(shè)置

2024-07-25 08:48:49

WPFGIF動畫包管理器

2009-07-16 13:50:28

AWT和Swing

2009-12-28 15:01:39

WPF樹應(yīng)用

2009-12-23 15:16:52

WPF數(shù)據(jù)綁定

2009-12-15 10:23:23

Ruby應(yīng)用技巧

2009-12-23 10:46:38

WPF實現(xiàn)用戶界面

2009-12-25 09:34:50

WPF顯示HTML

2009-12-28 11:14:29

WPF顯示文本
點贊
收藏

51CTO技術(shù)棧公眾號