Mostrar BMP en la consola V2 Curso de Programación C# Sharp

Lección:

Administración de Archivos


Ejercicio:

Mostrar BMP en la consola V2 22


Objetivo:

Cree un programa para mostrar un archivo BMP de 72x24 en la consola.
Debe usar la información en el encabezado (ver el ejercicio del 7 de febrero). Preste atención al campo llamado "inicio de los datos de imagen". Después de esa posición, encontrará los píxeles de la imagen (puede ignorar la información sobre la paleta de colores y dibujar una "X" cuando el color es 255, y un espacio en blanco si el color es diferente).

Nota: puede crear una imagen de prueba, con los siguientes pasos (en Paint para Windows): Abra Paint, cree una nueva imagen, cambie sus propiedades en el menú Archivo para que sea una imagen en color, ancho 72, altura 24, guardar como "mapa de bits de 256 colores (BMP)".


Código:

using System; 
using System.IO;
public class DisplayPGM
{
    public static void Main(string[] args)
    {
        BinaryReader inputFile;

        string fileName = "";

        if (args.Length != 1)
        {
            Console.WriteLine("Please enter filename...");
            fileName = Console.ReadLine();
        }
        else
            fileName = args[0];


        if (!File.Exists(fileName))
        {
            Console.WriteLine("the file not exists");
            return;
        }

        try
        {
            inputFile = new BinaryReader(
                File.Open(fileName, FileMode.Open));

            // Leo cabecera 1: deber ser P5
            char tag1 = Convert.ToChar(inputFile.ReadByte());
            char tag2 = Convert.ToChar(inputFile.ReadByte());
            byte endOfLine = inputFile.ReadByte();
            if ((tag1 != 'P') || (tag2 != '5')
               || (endOfLine != 10))
            {
                Console.WriteLine("The file is not a PGM");
                inputFile.Close();
                return;
            }

            // Leo cabecera 2: ancho y alto
            byte data = 0;
            string sizeOfImage = "";
            while (data != 10)
            {
                data = inputFile.ReadByte();
                sizeOfImage += Convert.ToChar(data);
            }
            string[] widthAndHeight = sizeOfImage.Split(' ');
            int width = Convert.ToInt32(widthAndHeight[0]);
            int height = Convert.ToInt32(widthAndHeight[1]);

            // Leo cabecera 3: deber ser 255
            char maxIntensity1 = Convert.ToChar(inputFile.ReadByte());
            char maxIntensity2 = Convert.ToChar(inputFile.ReadByte());
            char maxIntensity3 = Convert.ToChar(inputFile.ReadByte());
            byte endOfLine1 = inputFile.ReadByte();
            if ((maxIntensity1 != '2') || (maxIntensity2 != '5')
               || (maxIntensity3 != '5') || (endOfLine1 != 10))
            {
                Console.WriteLine("Must be 256 grey levels");
                inputFile.Close();
                return;
            }

        }
        catch (Exception e)
        {
            Console.WriteLine("Error: {0}", e);
        }
    }
}