偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

1,曾有過的嘗試:

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

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

2,GifBitmapDecoder

我們發(fā)現(xiàn)WPF中有一個(gè)名為GifBitmapDecoder的類,其可以將WPF顯示動(dòng)態(tài)GIF分解成很多幀并保存在一個(gè)列表中,每一幀為一個(gè)BitmapFrame類型的對(duì)象,其父類為BitmapSource,這也就意味著,我們可以將每一幀賦值給一個(gè)Image控件的Source屬性,這樣我們可以得到針對(duì)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

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

 

  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. }  

以上就是對(duì)WPF顯示動(dòng)態(tài)GIF的相關(guān)方法的介紹。

責(zé)任編輯:曹凱 來(lái)源: 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后臺(tái)控制動(dòng)畫

2009-12-25 17:39:01

WPF驗(yàn)證

2009-11-27 11:08:11

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

2009-11-30 11:10:12

PHP顯示MySQL亂

2010-03-03 16:25:41

Python字符串顯示

2010-01-14 16:04:32

VB.NET顯示時(shí)間

2010-03-04 14:21:17

2009-12-25 09:44:52

WPF窗口設(shè)置

2024-07-25 08:48:49

WPFGIF動(dòng)畫包管理器

2009-07-16 13:50:28

AWT和Swing

2009-12-23 15:16:52

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

2009-12-28 15:01:39

WPF樹應(yīng)用

2009-12-15 10:23:23

Ruby應(yīng)用技巧

2009-12-23 10:46:38

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

2009-12-25 09:34:50

WPF顯示HTML

2009-12-28 11:14:29

WPF顯示文本
點(diǎn)贊
收藏

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