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