internal static Sprite ReadFromStream(Stream stream) { var sprite = new Sprite(); using (var reader = new BinaryReader(stream, Encoding.UTF8, true)) { var magicNumber = reader.ReadBytes(4); UInt32 frameCount = 0; sprite.Version = reader.ReadUInt32(); sprite.Type = (SpriteType)reader.ReadUInt32(); sprite.Format = (SpriteFormat)reader.ReadUInt32(); sprite.BoudingRadius = reader.ReadSingle(); sprite.MaxWidth = reader.ReadUInt32(); sprite.MaxHeight = reader.ReadUInt32(); frameCount = reader.ReadUInt32(); sprite.BeamLength = reader.ReadSingle(); sprite.SynchronizationType = (SpriteSynchronizationType)reader.ReadUInt32(); sprite.Palette = SpritePalette.ReadFromStream(stream); List <SpriteFrame> frames = new List <SpriteFrame>(); for (int i = 0; i < frameCount; ++i) { frames.Add(SpriteFrame.ReadFromStream(stream)); } sprite.Frames = frames; } return(sprite); }
internal static SpritePalette ReadFromStream(Stream stream) { var palette = new SpritePalette(); using (var reader = new BinaryReader(stream, Encoding.UTF8, true)) { palette.Size = reader.ReadUInt16(); var colorEntries = new List <Color>(); for (int i = 0; i < palette.Size; ++i) { var colorEntry = reader.ReadBytes(3); colorEntries.Add(Color.FromArgb(0xFF, colorEntry[0], colorEntry[1], colorEntry[2])); } palette.Entries = colorEntries; } return(palette); }