日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
WPF顯示動態(tài)GIF技巧分享

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

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站建設(shè)、隆德網(wǎng)絡(luò)推廣、重慶小程序開發(fā)公司、隆德網(wǎng)絡(luò)營銷、隆德企業(yè)策劃、隆德品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供隆德建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

在我們尋求幫助的時候,最不愿意聽到的答復是:很抱歉,在當前版本的產(chǎn)品中還沒有實現(xiàn)該功能... 在WPF中顯示動態(tài)的GIF圖像時便遇到了這樣的問題,WPF中強大的Image控件卻不支持動態(tài)的GIF(其只能顯示***幀).當然,我們可以說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)圖片,成功了,但麻煩的事情是鼠標右鍵可以點出網(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)方法的介紹。


新聞標題:WPF顯示動態(tài)GIF技巧分享
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/cocgodi.html