public static Tuple <List <PalMap>, Palette> Convert(byte[][] Imgs, int W)
        {
            Palette       Pal = new Palette();
            List <PalMap> PMs = new List <PalMap>();

            foreach (byte[] Img in Imgs)
            {
                PalMap PM = new PalMap();
                PMs.Add(PM);

                PM.Pixels = new int[Img.Length / W][];
                for (int i = 0; i < PM.Pixels.Length; i++)
                {
                    PM.Pixels[i] = new int[W];
                }

                for (int i = 0; i < Img.Length / 4; i++)
                {
                    byte B = Img[4 * i];
                    byte G = Img[4 * i + 1];
                    byte R = Img[4 * i + 2];
                    byte A = Img[4 * i + 3];

                    Colour C = new Colour(R, G, B, A);

                    if (Pal.Colours.Count == 0)
                    {
                        Pal.Colours.Add(C);
                        PM.Pixels[i / W][i % W] = 0;
                    }
                    else
                    {
                        for (int j = 0; j < Pal.Colours.Count; j++)
                        {
                            if (Pal.Colours[j].DecCode == C.DecCode)
                            {
                                PM.Pixels[i / W][i % W] = j;
                                break;
                            }
                            else if (j == Pal.Colours.Count - 1)
                            {
                                Pal.Colours.Add(C);
                                PM.Pixels[i / W][i % W] = j + 1;
                            }
                        }
                    }
                }
            }

            return(new Tuple <List <PalMap>, Palette>(PMs, Pal));
        }
        public static byte[] Convert(PalMap PM, Palette Pal)
        {
            byte[] res = new byte[PM.Width * PM.Height * 4];

            for (int i = 0; i < PM.Width * PM.Height; i++)
            {
                int w = W(i, PM.Width);
                int h = H(i, PM.Width);

                res[4 * i]     = Pal.Colours[PM.Pixels[h][w]].B;
                res[4 * i + 1] = Pal.Colours[PM.Pixels[h][w]].G;
                res[4 * i + 2] = Pal.Colours[PM.Pixels[h][w]].R;
                res[4 * i + 3] = Pal.Colours[PM.Pixels[h][w]].A;
            }

            return(res);
        }
        public static Tuple<List<PalMap>, Palette> Convert(byte[][] Imgs, int W)
        {
            Palette Pal = new Palette();
            List<PalMap> PMs = new List<PalMap>();

            foreach (byte[] Img in Imgs)
            {
                PalMap PM = new PalMap();
                PMs.Add(PM);

                PM.Pixels = new int[Img.Length / W][];
                for (int i = 0; i < PM.Pixels.Length; i++)
                    PM.Pixels[i] = new int[W];

                for (int i = 0; i < Img.Length / 4; i++)
                {
                    byte B = Img[4 * i];
                    byte G = Img[4 * i + 1];
                    byte R = Img[4 * i + 2];
                    byte A = Img[4 * i + 3];

                    Colour C = new Colour(R, G, B, A);

                    if (Pal.Colours.Count == 0)
                    {
                        Pal.Colours.Add(C);
                        PM.Pixels[i / W][i % W] = 0;
                    }
                    else
                        for (int j = 0; j < Pal.Colours.Count; j++)
                            if (Pal.Colours[j].DecCode == C.DecCode)
                            {
                                PM.Pixels[i / W][i % W] = j;
                                break;
                            }
                            else if (j == Pal.Colours.Count - 1)
                            {
                                Pal.Colours.Add(C);
                                PM.Pixels[i / W][i % W] = j + 1;
                            }
                }

            }

            return new Tuple<List<PalMap>, Palette>(PMs, Pal);
        }
        public static byte[] Convert(PalMap PM, Palette Pal)
        {
            byte[] res = new byte[PM.Width * PM.Height * 4];

            for (int i = 0; i < PM.Width * PM.Height; i++)
            {
                int w = W(i, PM.Width);
                int h = H(i, PM.Width);

                res[4 * i] = Pal.Colours[PM.Pixels[h][w]].B;
                res[4 * i + 1] = Pal.Colours[PM.Pixels[h][w]].G;
                res[4 * i + 2] = Pal.Colours[PM.Pixels[h][w]].R;
                res[4 * i + 3] = Pal.Colours[PM.Pixels[h][w]].A;
            }

            return res;
        }