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());
        }
Ejemplo n.º 3
0
        static public unsafe byte[] ToPixelData(this SixLabors.ImageSharp.Image <SixLabors.ImageSharp.PixelFormats.L16> image)
        {
            const int pixelSize = 2;

            byte[] pixelData = new byte[pixelSize * image.Width * image.Height];
            fixed(byte *p = &pixelData[0])
            for (int y = 0; y < image.Height; y++)
            {
                Span <L16> span = image.GetPixelRowSpan(y);

                fixed(L16 *p2 = &span[0])
                Buffer.MemoryCopy(p2, p + y * image.Width * pixelSize, image.Width * pixelSize, image.Width * pixelSize);
            }

            return(pixelData);
        }
        public List <SixLabors.ImageSharp.Image> ConvertaBytesParaTile(byte[] imagem, string bpp)
        {
            List <SixLabors.ImageSharp.Image> tiles = new List <SixLabors.ImageSharp.Image>();

            int complemento = 1;

            if (bpp.Contains("4"))
            {
                complemento = 2;
            }


            using (BinaryReader br = new BinaryReader(new MemoryStream(imagem)))
            {
                while (br.BaseStream.Position < imagem.Length)
                {
                    SixLabors.ImageSharp.Image <Rgba32> image = new SixLabors.ImageSharp.Image <Rgba32>(8, 8);

                    for (int y = 0; y < image.Height; y++)
                    {
                        Span <Rgba32> pixelRowSpan = image.GetPixelRowSpan(y);
                        for (int x = 0; x < image.Width; x += complemento)
                        {
                            if (bpp.Contains("8"))
                            {
                                int valorNaPaleta = br.ReadByte();
                                pixelRowSpan[x] = new Rgba32(CoresPaleta[valorNaPaleta].R, CoresPaleta[valorNaPaleta].G, CoresPaleta[valorNaPaleta].B);
                            }
                            else
                            {
                                int valorNaPaleta = br.ReadByte();
                                int nibbleAlto    = (valorNaPaleta & 0xF0) >> 4;
                                int nibbleBaixo   = (valorNaPaleta & 0x0F);
                                pixelRowSpan[x]     = new Rgba32(CoresPaleta[nibbleBaixo].R, CoresPaleta[nibbleBaixo].G, CoresPaleta[nibbleBaixo].B);
                                pixelRowSpan[x + 1] = new Rgba32(CoresPaleta[nibbleAlto].R, CoresPaleta[nibbleAlto].G, CoresPaleta[nibbleAlto].B);
                            }
                        }
                    }

                    tiles.Add(image);
                }
            }

            return(tiles);
        }
        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());
        }