Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }