public static DDSHeader Parse(byte[] buffer, int offset = 0) { int length = buffer.Length - offset; var stream = new MemoryStream(buffer, offset, length); var reader = new BinaryReader(stream); var header = new DDSHeader { Size = reader.ReadUInt32() }; if (header.Size != DefaultSize) { throw new ArgumentException("Wrong Header Size!"); } header.Flags = (DDSHeaderFlags)reader.ReadUInt32(); header.Height = reader.ReadUInt32(); header.Width = reader.ReadUInt32(); header.LinearSize = reader.ReadUInt32(); header.Depth = reader.ReadUInt32(); header.MipmapCount = reader.ReadUInt32(); header.Reserved1 = new uint[11]; for (int i = 0; i < header.Reserved1.Length; i++) { header.Reserved1[i] = reader.ReadUInt32(); } header.PixelFormat = DDSPixelFormat.Parse(reader.ReadBytes(32)); header.Caps = (DDSCaps)reader.ReadUInt32(); header.Caps2 = (DDSCaps2)reader.ReadUInt32(); header.Caps3 = reader.ReadUInt32(); header.Caps4 = reader.ReadUInt32(); header.Reserved2 = reader.ReadUInt32(); return(header); }
public static DDSPixelFormat Parse(byte[] buffer, int offset = 0) { int length = buffer.Length - offset; var stream = new MemoryStream(buffer, offset, length); var reader = new BinaryReader(stream); var pixelFormat = new DDSPixelFormat { Size = reader.ReadUInt32() }; if (pixelFormat.Size != DefaultSize) { throw new ArgumentException("Invalid PixelFormat Size!"); } pixelFormat.Flags = (DDSPixelFlags)reader.ReadUInt32(); pixelFormat.FourCC = Encoding.ASCII.GetString(reader.ReadBytes(4)); pixelFormat.RGBBitCount = reader.ReadUInt32(); pixelFormat.RBitMask = reader.ReadUInt32(); pixelFormat.GBitMask = reader.ReadUInt32(); pixelFormat.BBitMask = reader.ReadUInt32(); pixelFormat.ABitMask = reader.ReadUInt32(); return(pixelFormat); }