public LayerData(string dataString, string encoding, string compression, Layer layer) { this.dataString = dataString; this.encoding = encoding; this.compression = compression; globalTileID = new int[layer.Width, layer.Height]; tileRotation = new SpriteEffects[layer.Width, layer.Height]; ReadAndDecodeDataString(layer); }
private Stream GetStream(byte[] data, Layer layer) { Stream stream; switch (compression) { case "gzip": stream = new GZipStream(new MemoryStream(data), CompressionMode.Decompress); break; case "uncompressed": stream = new MemoryStream(data); break; case "zlib": stream = new Ionic.Zlib.ZlibStream(new MemoryStream(data), Ionic.Zlib.CompressionMode.Decompress); break; default: throw new UnsupportedCompressionException("Layer \"" + layer + "\" has unsupported compression."); } return stream; }
private void ReadAndDecodeDataString(Layer layer) { switch (encoding) { case "base64": char[] encodedString = dataString.Trim().ToCharArray(); byte[] decodedString = Convert.FromBase64CharArray(encodedString, 0, encodedString.Length); DecompressAndWriteData(GetStream(decodedString, layer)); break; default: throw new UnsupportedEncodingException("Layer \"" + layer + "\" has unsupported encoding."); } }