using System.IO; using FSO.Files.Utils; using Microsoft.Xna.Framework; namespace FSO.Files.Formats.IFF.Chunks { /// /// This chunk type holds a color palette. /// public class PALT : IffChunk { public PALT() { } public PALT(Color color) { Colors = new Color[256]; for (int i = 0; i < 256; i++) { Colors[i] = color; } } public Color[] Colors; public int References = 0; /// /// Reads a PALT chunk from a stream. /// /// An Iff instance. /// A Stream object holding a PALT chunk. public override void Read(IffFile iff, Stream stream) { using (var io = IoBuffer.FromStream(stream, ByteOrder.LITTLE_ENDIAN)) { var version = io.ReadUInt32(); var numEntries = io.ReadUInt32(); var reserved = io.ReadBytes(8); Colors = new Color[numEntries]; for (var i = 0; i < numEntries; i++) { var r = io.ReadByte(); var g = io.ReadByte(); var b = io.ReadByte(); Colors[i] = new Color(r, g, b); } } } public override bool Write(IffFile iff, Stream stream) { using (var io = IoWriter.FromStream(stream, ByteOrder.LITTLE_ENDIAN)) { io.WriteUInt32(0); io.WriteUInt32((uint)Colors.Length); io.WriteBytes(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }); foreach (var col in Colors) { io.WriteByte(col.R); io.WriteByte(col.G); io.WriteByte(col.B); } return true; } } public bool PalMatch(Color[] data) { for (var i=0; i= data.Length) return true; if (data[i].A != 0 && data[i] != Colors[i]) return false; } return true; } } }