Beispiel #1
0
    // Decode gif file to textures frame list
    private void DecodeGif(byte[] bytes)
    {
        var ms = new MemoryStream(bytes);

        frames      = new List <Texture>();
        frameDelays = new List <float>();

        // To stop playing previous gif
        index = 0;

        using (var gifStream = new GifStream(ms))
        {
            while (gifStream.HasMoreData)
            {
                switch (gifStream.CurrentToken)
                {
                case GifStream.Token.Image:
                    // var image = gifStream.ReadImage();
                    // do something with image
                    // This code is copy from Unitylist
                    var image = gifStream.ReadImage();
                    var frame = new Texture2D(
                        gifStream.Header.width,
                        gifStream.Header.height,
                        TextureFormat.ARGB32, false);

                    frame.SetPixels32(image.colors);
                    frame.Apply();

                    frames.Add(frame);
                    frameDelays.Add(image.SafeDelaySeconds);     // More about SafeDelay below

                    break;

                case GifStream.Token.Comment:
                    var comment = gifStream.ReadComment();
                    // log this comment
                    break;

                default:
                    gifStream.SkipToken();
                    // this token has no use for you, skip it
                    break;
                }
            }
        }
    }