/// <summary> /// Erstellt eine Palette aus den angegebenen Farbwerten /// </summary> /// <param name="entries">Array aus System.Color Werten, muss 16 oder 256 Einträge beinhalten</param> /// <param name="isEncoded">Gibt an ob die Palette komprimiert vorhanden ist</param> public Palette(PaletteEntry[] entries, bool isEncoded = false) { IsEncoded = isEncoded; if (entries.Count() == 16 || entries.Count() == 256) { _entries = entries; } else { throw new Exception("Das angegebene Farbarray muss entweder 16 oder 256 Farben haben."); } _origSize = GetSize(); }
/// <summary> /// Erstellt eine Palette aus den Werten an der angegebenen Romadresse /// </summary> /// <param name="input">Rom Objekt, welches die Palettendaten enthält</param> /// <param name="offset">Offset der Daten</param> /// <param name="isEncoded">Wenn true: Die Daten werden zuerst dekomprimiert(LZ77)</param> /// <param name="is256Pal">Wenn true: Lädt 256 Einträge anstatt 16</param> public Palette(Rom input, UInt32 offset, bool isEncoded, bool is256Pal = false) { IsEncoded = isEncoded; _isRepointable = true; _currentOffset = offset; short cols = 16; if (is256Pal) { cols = 256; } _entries = new PaletteEntry[cols]; var entryList = new List<UInt16>(); if (!isEncoded) { { input.SetStreamOffset(offset); entryList = input.ReadUShortArray(cols); } } else { long origSize; byte[] unlz = RomDecode.LzUncompress(input, offset, out origSize); for (int i = 0; i < unlz.Length / 2; i++) { UInt16 temp = unlz[(2*i)]; temp |= (UInt16) ((unlz[1 + (i*2)]) << 8); entryList.Add(temp); } } for (int i = 0; i < cols; i++) { _entries[i] = new PaletteEntry(entryList[i]); } if (_entries.Length != cols) { throw new Exception("Die angegebene Palette hat nicht die angegebene Anzahl an Farben"); } _lenght = GetRawData().Length; _origSize = GetSize(); }