public Bitmap ExporteImagemSemTileMap(List <SixLabors.ImageSharp.Image> tiles, Bitmap imagemFinal)
        {
            if (tiles.Count > 0)
            {
                int contadorTiles = 0;

                using (SixLabors.ImageSharp.Image <Rgba32> image = new SixLabors.ImageSharp.Image <Rgba32>(imagemFinal.Width, imagemFinal.Height))
                {
                    for (int y = 0; y < imagemFinal.Height; y += 8)
                    {
                        Span <Rgba32> pixelRowSpan = image.GetPixelRowSpan(y);
                        for (int x = 0; x < imagemFinal.Width; x += 8)
                        {
                            image.Mutate(o => o.DrawImage(tiles[contadorTiles], new SixLabors.ImageSharp.Point(x, y), 1f));
                            tiles[contadorTiles].Dispose();
                            //pixelRowSpan[x] = new Rgba32(x / 255, y / 255, 50, 255);
                            contadorTiles++;
                        }
                    }


                    return(image.ToBitmap());
                }
            }

            return(null);
        }
        public Bitmap Exporte2bpp2D(int largura, int altura, byte[] imagem)
        {
            CoresPaleta = new List <Color>();
            CoresPaleta.Add(Color.FromArgb(0, 0, 0));
            CoresPaleta.Add(Color.FromArgb(255, 255, 255));
            CoresPaleta.Add(Color.FromArgb(169, 169, 169));
            CoresPaleta.Add(Color.FromArgb(100, 100, 100));
            int contador = 0;

            var bits = new BitArray(imagem);


            SixLabors.ImageSharp.Image <Rgba32> imagemFinal = new SixLabors.ImageSharp.Image <Rgba32>(largura, altura);

            for (int y = 0; y < imagemFinal.Height; y++)
            {
                Span <Rgba32> pixelRowSpan = imagemFinal.GetPixelRowSpan(y);
                for (int x = 0; x < imagemFinal.Width; x++)
                {
                    int valor1     = bits[contador] ? 1 : 0;
                    int valor2     = bits[contador + 1] ? 1 : 0;
                    int valorFinal = (valor2 << 1) | valor1;
                    pixelRowSpan[x] = new Rgba32(CoresPaleta[valorFinal].R, CoresPaleta[valorFinal].G, CoresPaleta[valorFinal].B);
                    contador       += 2;
                }
            }

            return(imagemFinal.ToBitmap());
        }
        public Bitmap LeiaTileMapERetorneImagem(List <ushort> tileMap, List <SixLabors.ImageSharp.Image> tiles, Bitmap imagemFinal)
        {
            int contadorTileMap = 0;
            int resY            = tileMap.Count / 32 * 8;

            imagemFinal = new Bitmap(256, resY);


            using (SixLabors.ImageSharp.Image <Rgba32> image = new SixLabors.ImageSharp.Image <Rgba32>(imagemFinal.Width, imagemFinal.Height))
            {
                for (int y = 0; y < imagemFinal.Height; y += 8)
                {
                    for (int x = 0; x < imagemFinal.Width; x += 8)
                    {
                        int valor   = tileMap[contadorTileMap];
                        int tileNum = valor & 0x3FF;
                        valor = valor >> 10;

                        var tile = tiles[tileNum].Clone(i => i.Flip(FlipMode.None));

                        int horizotal = valor & 1;

                        valor = valor >> 1;

                        int vertical = valor & 1;

                        if (horizotal == 1)
                        {
                            tile.Mutate(t => t.RotateFlip(RotateMode.Rotate180, FlipMode.Vertical));
                        }

                        if (vertical == 1)
                        {
                            tile.Mutate(t => t.RotateFlip(RotateMode.Rotate180, FlipMode.Horizontal));
                        }

                        image.Mutate(o => o.DrawImage(tile, new SixLabors.ImageSharp.Point(x, y), 1f));
                        contadorTileMap++;
                    }
                }


                return(image.ToBitmap());
            }
        }
        public Bitmap Exporte8bpp2D(byte[] imagem, int largura, int altura)
        {
            SixLabors.ImageSharp.Image <Rgba32> imagemFinal = new SixLabors.ImageSharp.Image <Rgba32>(largura, altura);

            using (BinaryReader br = new BinaryReader(new MemoryStream(imagem)))
            {
                for (int y = 0; y < imagemFinal.Height; y++)
                {
                    Span <Rgba32> pixelRowSpan = imagemFinal.GetPixelRowSpan(y);
                    for (int x = 0; x < imagemFinal.Width; x++)
                    {
                        int valorNaPaleta = br.ReadByte();
                        pixelRowSpan[x] = new Rgba32(CoresPaleta[valorNaPaleta].R, CoresPaleta[valorNaPaleta].G, CoresPaleta[valorNaPaleta].B);
                    }
                }
            }

            return(imagemFinal.ToBitmap());
        }