private static BitmapSpriteFrame[] ParseFrames(Stream s) { var numTiles = 16; var start = s.Position; var frames = new List <BitmapSpriteFrame>(); const int tileWidth = 32; var numPixels = tileWidth * tileWidth; var numBytesPerTile = numPixels / 8; var dataSize = new Size(tileWidth, tileWidth); var size = new Size(tileWidth, tileWidth); s.Seek(0, SeekOrigin.Begin); for (var i = 0; i < numTiles; i++) { var bytes = s.ReadBytes(numBytesPerTile); var swappedBytes = new List <byte>(); for (var rowIndex = 0; rowIndex < tileWidth; rowIndex++) { var row = bytes.Skip(rowIndex * 4).Take(4).Reverse().ToList(); swappedBytes.AddRange(row); } var newBytes = swappedBytes.ToArray(); var bits = new BitArray(newBytes); var unpackedBytes = new byte[numPixels]; for (var byteI = 0; byteI < numPixels; byteI++) { unpackedBytes[byteI] = (byte)(bits[byteI] ? 1 : 0); } var tile = new BitmapSpriteFrame { Size = size, FrameSize = size, Data = unpackedBytes, Type = SpriteFrameType.Indexed, }; frames.Add(tile); } s.Position = start; return(frames.ToArray()); }
private static BitmapSpriteFrame[] ParseFrames(Stream s) { var start = s.Position; var frames = new List <BitmapSpriteFrame>(); const int tileWidth = 32; var dataSize = new Size(tileWidth * 8, tileWidth * 8); var size = new Size(tileWidth, tileWidth); var frameSize = new Size(0, 0); s.Seek(12, SeekOrigin.Begin); var something = s.ReadDouble(); var width = s.ReadUInt32(); var height = s.ReadUInt32(); var numTiles = height / width; s.Seek(1088, SeekOrigin.Begin); var header = s.ReadASCII(4); var blockSize = s.ReadUInt32(); for (var i = 0; i < numTiles; i++) { var bytes = s.ReadBytes(tileWidth * tileWidth); var tile = new BitmapSpriteFrame { Size = size, FrameSize = size, Data = bytes, Type = SpriteFrameType.Indexed, }; frames.Add(tile); } s.Position = start; return(frames.ToArray()); }