1. 程式人生 > >Unity解析gif動態圖

Unity解析gif動態圖

工作需求,要播放一張gif圖片,又不想轉成視訊播放,就開始研究怎樣解析gif,在網上也看了不少教程,最後根據自己需求寫了個指令碼。

首先,Unity是不支援gif的(至少我沒找到方法),而又要在NGUI中顯示gif圖片。所以就想到了將gif解析成序列幀再去迴圈播放。

有人說可以找軟體解析,然後匯入Unity做動畫,最終我沒有采用,自己再Unity中以程式碼解析,然後播放的。

程式碼如下(在Awake中解析的,因為要在其他指令碼呼叫,實時解析的話,到時候會花費一會時間;):

using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;

using UnityEngine;

public class AnimatedGifDrawer : MonoBehaviour
{
    public string loadingGifPath;//路徑
    public UITexture tex;//圖片
    public float speed = 0.1f;//播放速度

    private bool isPlay = false;//是否播放
    private int i = 0;//控制要播放的圖片

    private List<Texture2D> gifFrames = new List<Texture2D>();//儲存解析出來的圖片
    void Awake()
    {
        Image gifImage = Image.FromFile(loadingGifPath);
        FrameDimension dimension = new FrameDimension(gifImage.FrameDimensionsList[0]);
        int frameCount = gifImage.GetFrameCount(dimension);
        for (int i = 0; i < frameCount; i++)
        {
            gifImage.SelectActiveFrame(dimension, i);
            Bitmap frame = new Bitmap(gifImage.Width, gifImage.Height);
            System.Drawing.Graphics.FromImage(frame).DrawImage(gifImage, Point.Empty);
            Texture2D frameTexture = new Texture2D(frame.Width, frame.Height);
            for (int x = 0; x < frame.Width; x++)
                for (int y = 0; y < frame.Height; y++)
                {
                    System.Drawing.Color sourceColor = frame.GetPixel(x, y);
                    frameTexture.SetPixel( x, frame.Height - 1 - y, new Color32(sourceColor.R, sourceColor.G, sourceColor.B, sourceColor.A)); // for some reason, x is flipped
                }
            frameTexture.Apply();
            gifFrames.Add(frameTexture);
        }
    }

    private void Update()
    {
        if (isPlay == true)
        {
            i++;
            tex.mainTexture = gifFrames[(int)(i * speed) % gifFrames.Count];
        }    
    }

    /// <summary>
    /// 播放動畫
    /// </summary>
    public void StartAni()
    {
        isPlay = true;
    }

    /// <summary>
    /// 停止動畫
    /// </summary>
    public void StopAni()
    {
        isPlay = false;
        i = 0;
    }
}

相關推薦

Unity解析gif動態

工作需求,要播放一張gif圖片,又不想轉成視訊播放,就開始研究怎樣解析gif,在網上也看了不少教程,最後根據自己需求寫了個指令碼。 首先,Unity是不支援gif的(至少我沒找到方法),而又要在NGUI中顯示gif圖片。所以就想到了將gif解析成序列幀再去迴圈播放。 有人說

怎麽制作GIF動態,在線GIF動畫制作工具哪個好

img 技術 工具制作 png 彈出 需要 輕松 watermark 全部 貼吧聊天中,我們經常會使用到GIF動態圖片,看著吧裏那些各式各樣的GIF動態圖,難免都想自己親手制作一張,那麽如何錄制GIF動態圖片呢?其實制作gif動態圖片還是比較容易得,有一款迅捷GIF制作工具

怎麼製作gif動態 QQ動態表情包怎麼製作

在平時的聊天中經常會使用到GIF動圖,不僅僅可以緩解氣氛,還很有趣,那這些動態圖是如何製作的呢?沒有想象的那麼難,今天來看看怎麼製作的吧! 1、先準備好素材,要製作什麼樣的動圖,可以是圖片也可以是視訊,也可以直接通過GIF製作工具直接錄製; 2、在電腦上執行迅捷GIF製作工具,開啟之後,點選螢幕錄製或者G

將網上搜集的處理gif動態的程式碼打包成jar

將網上搜集的處理gif動態圖的程式碼打包成jar 將網上搜集的處理gif的程式碼打包成jar,專案結構如下 建立類AnimatedGifEncoder package gifdecoder; import java.awt.Color; import java.awt.Gra

如何擷取視訊中的一部分,製作成GIF動態

怎麼把視訊做成gif 擷取視訊中的一部分內容,製作成GIF動態圖?是先用播放器進行擷取,還是說先轉換視訊格式,然後用相應的GIF編輯器呢。網上關於怎樣把視訊擷取轉化成gif動態圖片的方法有很多,林林總總可謂看的是眼花繚亂,但真正能行的卻沒有幾個。小編今日教大家一個將視訊轉換成gif的方法,不需要複雜的方法

Glide載入drawable資料夾下的gif動態

記錄一下:如何簡單的載入drawable資料夾下的gif動態圖。  (1) 新增Glide依賴           compile 'com.github.bumptech.glide:glide:3.7.0' (2)載入方法

JS生成gif動態下載

需求:通過動態變化的圖生成一個gif圖提供下載。 實現方案:1.可通過服務端生成對應gif,然後前端請求下載2.前端自己實現生成gif圖片,自行下載 採用方案:前端實現方式,於是在網上找各種相關的幾款元件調研,均有利弊,推薦兩款好用並且穩定的元件:1 html2canvas.js 官網:http://ht

NuGet使用教程(gif動態的方式演示)

下面以安裝Spring.Core元件為例進行詳細說明。 步驟: 1 利用vs安裝NuGet Packge Manager,由於我演示前我的vs已經安裝過了,搜尋出來後會在NuGet Packge Manager後面顯示綠色的勾,如果你的vs沒安裝過的話,到時點選安裝就行了。如下gif動圖

快速掌握Gif動態實現程式碼

前言:Gif一種動態圖片,網上有很多製作這個的工具,包括PS都有,但作為一名程式設計師,我覺得如果自己通過編寫程式碼把它實現,不但是對程式碼的掌握與複習,而且也是熟悉其原理的一個過程。額外說一句,個人不建議copy程式碼的,所以採用截圖的方式展現給大家,同時希望大家自己去實踐下才是真理! 下面開始我們的

Photoshop CS6將多張圖片合成GIF動態或視訊,並將其儲存匯出

(0)從Mini Bridge中拖入多張圖片(製作原材料),形成多個圖層。 (1)從“視窗”中開啟“時間軸” 從“時間軸”的選項中“從圖層建立幀”,並設定各幀的延遲時間。可點選播放進行預覽。 (2)儲存為GIF格式檔案。 從“檔案”選擇“儲存為Web所用格式”,命名並“儲存”即可

python,tensorflow線性迴歸Django網頁顯示Gif動態

1.工程組成 2.urls.py """Django_machine_learning_linear_regression URL Configuration The `urlpatterns` list routes URLs to views. For more information p

python,tensorflow線性回歸Django網頁顯示Gif動態

oct ati des os.path inf a + b 顯示 highlight gop 1.工程組成 2.urls.py """Django_machine_learning_linear_regression URL Configuration The `ur

我來告訴你,那些部落格中的gif動態是怎麼弄的?

大家都知道,圖片比單純的文字給人的視覺衝擊力更大,表達的內容也更直觀易懂,經常在部落格上看到動態的gif圖,那這些gif動態圖是怎麼製作的呢,特別是Android移動開發者,寫了一個demo,寫部落格

如何用AS錄製手機螢幕並轉成gif動態

有時候寫一篇部落格,一大片的講述與程式碼,不如動態圖來的簡單明瞭。那我們安卓人員如何快速製作gif動態圖呢? 首先可以用我們安卓人員特有的法寶Android studio錄製一段小視訊。(PS:前提是你的真實手機已經連線了你的電腦了)點選如下錄製按鈕,在彈出的對話方塊中點

怎樣錄製gif動態

看到視訊裡的精彩畫面,想用動圖的形式儲存下來,應該如何錄製呢,今天就介紹一款小巧實用,操作簡單的軟體,GifCam 2.0 漢化綠色版。相比其它的錄製軟體,它是免費無水印又可以線上錄製的. 本來學習一下ps製作gif,但是被這款電腦軟體的簡單易上手所吸引,下面

Android錄製螢幕視訊 將視訊轉換為GIF動態

寫在前面:前提是Android手機要有ROOT許可權! 第一步:在手機上安裝"SCR螢幕錄影.apk"軟體,安裝之後,開啟設定,勾選"垂直幀" 點選手機上的"SCR螢幕錄影",會彈出3個按鈕的彈窗,再點選彈窗上的軟體LOGO,錄屏開始了,按下電源鍵手機鎖屏,錄製結束,視訊檔

為什麼微信小程式使用wx.chooseImage上傳 gif動態被自動轉成了 jpeg圖片了?

目前小程式是不支援上傳gif動圖的,就算使用wx.chooseImage上傳gif格式的圖片了,依然還是不行,傳到伺服器端的圖片被轉成jpeg的圖,不動了。 究其原因,應該是和圖片的大小有關,相對來說gif圖比同幀的.mp4視訊要佔更大的空間,另外gif可以載入更多的未

載入GIF動態

轉載:http://blog.csdn.net/longer__/article/details/67636456最近因為專案中需要用到gif動態圖片,而android目前還不支援gif動態圖片的載入,所以搜尋了網上已有的第三方自定義控制元件,幫助實現載入gif圖片。 第一種

Android截如何生成gif動態

我們在部落格裡面經常看到有人上傳的截圖是動態的,即gif格式,那麼截圖怎麼生成gif格式的圖片呢? 所需工具 ①視訊截圖工具:用Android Studio開發Android的人,應該都知道,And

glide載入gif動態

ImageView ivGif = (ImageView) findViewById(R.id.ivGif); Glide.with(MainActivity.this) .load(R.drawable.mk) .asGif()