コード例 #1
0
        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());
                }
            }
        }
コード例 #2
0
        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;
        }