private static Color[] SetPalette(BinaryReaderX br, TMXPixelFormat paletteFormat, int colorCount) { Color[] tmpPalette = new Color[colorCount]; for (int i = 0; i < colorCount; i++) { byte r, g, b, a; if (paletteFormat == TMXPixelFormat.PSMCT32) { uint color = br.ReadUInt32(); r = (byte)color; g = (byte)(color >> 8); b = (byte)(color >> 16); a = (byte)(color >> 24); } else { ushort color = br.ReadUInt16(); r = (byte)((color & 0x001F) << 3); g = (byte)(((color & 0x03E0) >> 5) << 3); b = (byte)(((color & 0x7C00) >> 10) << 3); a = (byte)(i == 0 ? 0 : 0x80); } tmpPalette[i] = Color.FromArgb(a, r, g, b); } Color[] newPalette = new Color[colorCount]; if (colorCount == 256) { for (int i = 0; i < newPalette.Length; i += 32) { Array.Copy(tmpPalette, i, newPalette, i, 8); Array.Copy(tmpPalette, i + 8, newPalette, i + 16, 8); Array.Copy(tmpPalette, i + 16, newPalette, i + 8, 8); Array.Copy(tmpPalette, i + 24, newPalette, i + 24, 8); } } else { Array.Copy(tmpPalette, newPalette, tmpPalette.Length); } return(newPalette); }
private int GetPaletteDataSize(int paletteFormat, TMXPixelFormat imageFormat) { var paletteEncoding = TmxSupport.ColorFormats[paletteFormat]; int paletteSize = 0; switch (imageFormat) { case TMXPixelFormat.PSMT4: paletteSize = paletteEncoding.BitDepth * 16 / 8; break; case TMXPixelFormat.PSMT8: paletteSize = paletteEncoding.BitDepth * 256 / 8; break; } return(paletteSize); }