/// <summary> /// parse an PDS packet which contain palette info /// </summary> /// <param name="buffer">Buffer of raw byte data, starting right after segment</param> /// <param name="segment">object containing info about the current segment</param> /// <returns>number of valid palette entries (-1 for fault)</returns> private static PdsData ParsePds(byte[] buffer, SupSegment segment) { int paletteId = buffer[0]; // 8bit palette ID (0..7) // 8bit palette version number (incremented for each palette change) int paletteUpdate = buffer[1]; var p = new PaletteInfo { PaletteSize = (segment.Size - 2) / 5 }; if (p.PaletteSize <= 0) { return new PdsData { Message = "Empty palette" } } ; p.PaletteBuffer = new byte[p.PaletteSize * 5]; Buffer.BlockCopy(buffer, 2, p.PaletteBuffer, 0, p.PaletteSize * 5); // save palette buffer in palette object return(new PdsData { Message = "PalId: " + paletteId + ", update: " + paletteUpdate + ", " + p.PaletteSize + " entries", PaletteId = paletteId, PaletteVersion = paletteUpdate, PaletteInfo = p, }); }
public PaletteInfo(PaletteInfo paletteInfo) { PaletteSize = paletteInfo.PaletteSize; PaletteBuffer = new byte[paletteInfo.PaletteBuffer.Length]; Buffer.BlockCopy(paletteInfo.PaletteBuffer, 0, PaletteBuffer, 0, PaletteBuffer.Length); }