public TXG(Stream stream, string outputDir) { using (BigEndianReader reader = new BigEndianReader(stream)) { FileCount = reader.ReadUInt32(); Offsets = new uint[FileCount]; for (int i = 0; i < FileCount; i++) { Offsets[i] = reader.ReadUInt32(); } for (int i = 0; i < FileCount; i++) { reader.BaseStream.Position = Offsets[i]; string fileName = Path.Combine(outputDir, i + ".tpl"); Console.WriteLine(string.Format("File Name: {0}", fileName)); TXGHeader header = new TXGHeader(reader); MemoryStream mStream = new MemoryStream(); TPL tpl = new TPL(header, mStream); File.WriteAllBytes(fileName, mStream.ToArray()); } } }
public TXGHeader(BigEndianWriter writer, TPL tpl) { writer.Write(tpl.ImageCount); writer.Write(tpl.ImageFormat); writer.Write(tpl.PaletteFormat); writer.Write((uint)tpl.Width); writer.Write((uint)tpl.Height); if (tpl.ImageCount != 1) { writer.Write(0); } else { writer.Write(1); } ImageOffsets = new uint[tpl.ImageCount]; PaletteOffsets = new uint[tpl.ImageCount]; long PastOffset = writer.BaseStream.Position; for (int i = 0; i < tpl.ImageData.Length; i++) { writer.Write(0); } for (int i = 0; i < tpl.PaletteData.Length; i++) { writer.Write(0); } writer.AlignPosition(0x20, 0xFF); for (int i = 0; i < tpl.ImageData.Length; i++) { ImageOffsets[i] = (uint)writer.BaseStream.Position; writer.Write(tpl.ImageData[i]); } try { for (int i = 0; i < tpl.PaletteData.Length; i++) { PaletteOffsets[i] = (uint)writer.BaseStream.Position; writer.Write(tpl.PaletteData[i]); } } catch (ArgumentNullException ane) { } long CurrentOffset = writer.BaseStream.Position; writer.BaseStream.Position = PastOffset; for (int i = 0; i < tpl.ImageData.Length; i++) { writer.Write(ImageOffsets[i]); } for (int i = 0; i < tpl.PaletteData.Length; i++) { writer.Write(PaletteOffsets[i]); } writer.BaseStream.Position = CurrentOffset; }