Advertisement
nm9505

MS-BmpMakerClass-cs

May 21st, 2024
733
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.49 KB | Science | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using Xamarin.Forms;
  5. using System.Text;
  6.  
  7. using System.Collections.Generic;
  8.  
  9. namespace MandelBrootSet
  10. {
  11.     public class BmpMaker
  12.     {        
  13.         const int headerSize = 54;
  14.         readonly byte[] buffer;
  15.         public BmpMaker(int width, int height)
  16.         {
  17.             Width = width;
  18.             Height = height;
  19.             int numPixels = Width * Height;
  20.             int numPixelBytes = 4 * numPixels;
  21.             int fileSize = headerSize + numPixelBytes;
  22.             buffer = new byte[fileSize];
  23.             // Escritor y acumulador de encabezados: Buffer.
  24.             using (MemoryStream memoryStream = new MemoryStream(buffer))
  25.             {
  26.                 //Asignación binaria del archivo temporal.
  27.                 using (BinaryWriter writer = new BinaryWriter(memoryStream, Encoding.UTF8))
  28.                 {
  29.                     // Constructor del encabezado del BitMap (14 bytes).
  30.                      writer.Write(new char[] { 'B', 'M' });
  31.                      writer.Write(fileSize);
  32.                      writer.Write((short)0);
  33.                      writer.Write((short)0);
  34.                      writer.Write(headerSize);
  35.                      // Constructor BitmapInfoHeader (40 bytes).
  36.                      writer.Write(40); // Header size
  37.                      writer.Write(Width);
  38.                      writer.Write(Height);
  39.                      writer.Write((short)1); //Tasa
  40.                      writer.Write((short)32); //Tasa
  41.                      writer.Write(0); // Compresión
  42.                      writer.Write(numPixelBytes); //Balanza de imagen en pixeles.
  43.                      writer.Write(0); //Densidad de Pixels/Color
  44.                      writer.Write(0);
  45.                      writer.Write(0);
  46.                      writer.Write(0);
  47.                 }
  48.             }
  49.         }
  50.         //Instanciando Ancho y Altura
  51.         public int Width
  52.         {
  53.             private set;
  54.             get;
  55.         }
  56.         public int Height
  57.         {
  58.             private set;
  59.             get;
  60.         }
  61.         //Funciones de configuración de Color y carga del Buffer
  62.         public void SetPixel(int row, int col, Color color)
  63.         {
  64.             SetPixel(row, col,  (int)(255 * color.R),
  65.                                 (int)(255 * color.G),
  66.                                 (int)(255 * color.B),
  67.                                 (int)(255 * color.A));
  68.         }
  69.         public void SetPixel(int row, int col, int r, int g, int b, int a = 255)
  70.         {
  71.             int index = (row * Width + col) * 4 + headerSize;
  72.             buffer[index + 0] = (byte)b;
  73.             buffer[index + 1] = (byte)g;
  74.             buffer[index + 2] = (byte)r;
  75.             buffer[index + 3] = (byte)a;
  76.         }
  77.         //Método para generar la imagen.
  78.         public ImageSource Generate()
  79.         {
  80.             // Creando el MemoryStream a partir del Buffer colector de bitmaps.
  81.             MemoryStream memoryStream = new MemoryStream(buffer);
  82.             // Conversión a StreamImageSource.
  83.             ImageSource imageSource = ImageSource.FromStream(() =>
  84.             {
  85.                 return memoryStream;
  86.             });
  87.             return imageSource;
  88.         }
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement