Ejemplo n.º 1
0
        public byte[] GetFrame(int index)
        {
            if (index >= Frames.Length)
            {
                throw new ArgumentException("index");
            }
            if (null != Frames[index])
            {
                return(Frames[index]);
            }

            var entry = Dir.ElementAt(index) as EriEntry;

            byte[] prev_frame = null;
            if (index > 0 && entry.IsDiff)
            {
                prev_frame = GetFrame(index - 1);
            }
            using (var stream = File.CreateStream(entry.Offset, entry.Size))
            {
                var reader = new EriReader(stream, Info, Palette, prev_frame);
                reader.DecodeImage();
                Frames[index] = reader.Data;
            }
            return(Frames[index]);
        }
Ejemplo n.º 2
0
        public byte[] GetFrame(int index)
        {
            if (index >= Frames.Length)
            {
                throw new ArgumentException("index");
            }
            if (null != Frames[index])
            {
                return(Frames[index]);
            }

            var entry = Dir.ElementAt(index);

            byte[] pixels;
            using (var stream = OpenEntry(entry))
            {
                pixels = new byte[stream.Length];
                stream.Read(pixels, 0, pixels.Length);
            }
            if (index > 0)
            {
                var prev_frame = GetFrame(index - 1);
                for (int i = 0; i < pixels.Length; ++i)
                {
                    pixels[i] += prev_frame[i];
                }
            }
            Frames[index] = pixels;
            return(pixels);
        }