Ejercicio
Mostrar BMP en la consola V2
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 de Ejemplo
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);
}
}
}