android gif 圖片顯示問題

來源:互聯網
上載者:User

 

      關於android顯示gif圖片網上有很多人都給出瞭解決方案。主要是兩種,一種是使gif解碼器在程式運行時解碼gif,並將gif中幀提取並顯示。還有一種就是預先用工具將gif幀打散成n張圖,程式中切換載入來顯示。兩種方法都可以解決部分gif圖片的顯示問題。

      在實際應用中,遇到一些很奇怪的gif圖片,有一些幀是非完整圖片,這些幀需要在前一些幀基礎上合并顯示。對於這樣的圖片逐幀提取單獨顯示時就會有問題。比片中一隻小鳥在樹林中飛行,那呈現的效果就成了第一張顯示出樹林,然後顯示空白背景中一隻小鳥,如果沒有處理好小鳥所在幀的寬高和幀座標,那麼顯示出的小鳥可能會被展開填滿imageview區。

 

      解決方案其實很簡單,不能單張單張的呈現幀,要將幀連續起來,另外要將各幀的座標及寬高資訊全部提取並應用到幀的顯示中。

 

      gif檔案轉成位元組流後,7、8位元組代表gif框寬,9、10位元組代表gif框高。在映像資料區塊的1、2位元組表示x座標位移,3、4位元組表示y座標位移,5、6和7、8分別表示當前幀的寬和高

 

 

      byte[] bytes = stream.toByteArray();
int width = bytes[8]<8|bytes[7];//gif框寬
int height = bytes[10]<8|bytes[9];//gif框高

 

 

 

      在呈現圖片時,用疊加的方式來顯示圖片,圖片繪製時根據容器矩形、gif矩形、幀矩形資訊來計算在容器中的繪圖區,就不會有問題了。另外記得幀轉換成bmp時,顏色取argb,這樣可以保留透明等效果。

      因為是公司項目代碼不方便公開提供下載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.