Exemplo n.º 1
0
        public void Save(DDS dds, string FileName, List <List <byte[]> > data = null, bool IsDX10 = false)
        {
            BinaryDataWriter writer = new BinaryDataWriter(new FileStream(FileName, FileMode.Create, FileAccess.Write, FileShare.Write));

            writer.Write(Encoding.ASCII.GetBytes("DDS "));
            writer.Write(header.size);
            writer.Write(header.flags);
            writer.Write(header.height);
            writer.Write(header.width);



            writer.Write(header.pitchOrLinearSize);
            writer.Write(header.depth);
            writer.Write(header.mipmapCount);
            for (int i = 0; i < 11; ++i)
            {
                writer.Write(header.reserved1[i]);
            }

            writer.Write(header.ddspf.size);
            writer.Write(header.ddspf.flags);
            writer.Write(header.ddspf.fourCC);
            writer.Write(header.ddspf.RGBBitCount);
            writer.Write(header.ddspf.RBitMask);
            writer.Write(header.ddspf.GBitMask);
            writer.Write(header.ddspf.BBitMask);
            writer.Write(header.ddspf.ABitMask);
            writer.Write(header.caps);
            writer.Write(header.caps2);
            writer.Write(header.caps3);
            writer.Write(header.caps4);
            writer.Write(header.reserved2);

            if (IsDX10)
            {
                WriteDX10Header(writer);
            }

            if (data != null)
            {
                foreach (byte[] mip in data[0])
                {
                    writer.Write(mip);
                }
            }
            else
            {
                writer.Write(bdata);
            }

            writer.Flush();
        }
Exemplo n.º 2
0
        public void Save(string path)
        {
            var fs = File.Create(path);
            BinaryDataWriter writer = new BinaryDataWriter(fs, Encoding.UTF8);

            Header.WriteTo(writer);
            for (int i = 0; i < Header.MessageCount; i++)
            {
                if (Entries[i].Label != null)
                {
                    writer.Write(Entries[i].ID);
                    writer.Write(Entries[i].Address);
                }
            }
            var lbl_start = writer.Position;

            for (int i = 0; i < Header.MessageCount; i++)
            {
                if (Entries[i].Label != null)
                {
                    writer.Write(Entries[i].Label, BinaryStringFormat.ZeroTerminated);
                }
            }
            var msg_start = writer.Position;

            for (int i = 0; i < Header.MessageCount; i++)
            {
                if (Entries[i].Message != null)
                {
                    writer.Write(Entries[i].Message, BinaryStringFormat.ZeroTerminated);
                }
            }
            Header.LabelBlockSize   = (uint)(msg_start - lbl_start);
            Header.MessageBlockSize = (uint)(writer.Position - msg_start);
            writer.Seek(0, SeekOrigin.Begin);
            Header.WriteTo(writer);
            writer.Flush();
            fs.Close();
        }