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]); }
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); }