Mostrar BMP en la consola V2 - Ejercicio de Programacion C# Sharp

En este ejercicio, se te solicita desarrollar un programa en C# que pueda mostrar un archivo BMP de tamaño 72x24 en la consola. Para ello, deberás utilizar la información contenida en el encabezado del archivo BMP, prestando especial atención al campo llamado "start of image data". Este campo indica la posición en la que comienzan los datos de los píxeles de la imagen, que es la parte importante que debes procesar. Puedes omitir la información sobre la paleta de colores y, en su lugar, representar la imagen en la consola usando caracteres: dibujando una "X" cuando el valor del color del píxel sea 255 (blanco) y un espacio en blanco cuando el valor sea diferente.

Este ejercicio te ayudará a comprender cómo manejar los datos binarios en un archivo BMP y cómo extraer y representar visualmente los píxeles de una imagen en la consola, lo que es un desafío interesante para trabajar con gráficos en un entorno de texto.

Nota: Para realizar pruebas, puedes crear una imagen de prueba en Paint para Windows siguiendo los pasos indicados, creando una imagen de 72x24 píxeles con 256 colores y guardándola como "256 color bitmap (BMP)".

 Categoría

Administración de Archivos

 Ejercicio

Mostrar BMP En La Consola V2

 Objectivo

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)".

 Ejemplo Ejercicio C#

 Copiar Código C#
// Importing the System namespace to use its classes
using System; 

using System.IO; // Importing the IO namespace to handle file operations

class BmpViewer
{
    // The main method, where the program execution begins
    static void Main(string[] args)
    {
        // Check if a BMP file has been provided as a command-line argument
        if (args.Length < 1)
        {
            // Display an error message if no file name is provided
            Console.WriteLine("You must provide a BMP file as an argument.");
            return; // Exit the program if no file is provided
        }

        // Retrieve the file name from the command-line arguments
        string fileName = args[0];

        try
        {
            // Read the entire BMP file into a byte array
            byte[] bmpData = File.ReadAllBytes(fileName);

            // Check if the file starts with the "BM" signature, indicating a valid BMP file
            if (bmpData[0] != 'B' || bmpData[1] != 'M')
            {
                // Display an error message if the file is not a BMP file
                Console.WriteLine("The file is not a valid BMP file.");
                return; // Exit the program if the format is incorrect
            }

            // The starting position of the image data is located at byte 10 (4-byte offset)
            int startOfImageData = BitConverter.ToInt32(bmpData, 10);

            // Set the width and height of the BMP image
            int width = 72; // Fixed width as per the exercise requirement
            int height = 24; // Fixed height as per the exercise requirement

            // Iterate through each pixel in the BMP file
            for (int y = 0; y < height; y++)
            {
                // For each row, we need to read 72 pixels (3 bytes per pixel: Blue, Green, Red)
                for (int x = 0; x < width; x++)
                {
                    // Calculate the byte index for the current pixel
                    int pixelIndex = startOfImageData + (y * width + x) * 3;

                    // Extract the RGB values of the pixel (Blue, Green, Red)
                    byte blue = bmpData[pixelIndex];
                    byte green = bmpData[pixelIndex + 1];
                    byte red = bmpData[pixelIndex + 2];

                    // If the pixel color is white (255, 255, 255), display an "X"
                    if (red == 255 && green == 255 && blue == 255)
                    {
                        Console.Write("X");
                    }
                    else
                    {
                        // Otherwise, display a blank space
                        Console.Write(" ");
                    }
                }

                // After printing a row of pixels, move to the next line
                Console.WriteLine();
            }
        }
        catch (Exception ex)
        {
            // Display an error message if an exception occurs during file processing
            Console.WriteLine($"Error processing the file: {ex.Message}");
        }
    }
}

 Salida

BMP file (image.bmp) with a 72x24 pixel size where some pixels are white (255, 255, 255) and others have different colors.

The output in the console will look like this:
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 
X                                                     X 
X    X    X     X    X    X  X    X    X    X    X    X 
X    X    X    X    X    X    X    X    X    X    X    X 
X    X    X    X    X    X     X     X   X    X    X   X

Console Message:
Image data has been processed and displayed in the console.

If the file format is incorrect (e.g., not a valid BMP file), the program will output:
The file is not a valid BMP file.

Or if an exception occurs (e.g., file not found, read/write error), the program will display:
Error processing the file: error message

 Comparte este Ejercicio C# Sharp

 Más Ejercicios de Programacion C# Sharp de Administración de Archivos

¡Explora nuestro conjunto de ejercicios de programación C# Sharp! Estos ejercicios, diseñados específicamente para principiantes, te ayudarán a desarrollar una sólida comprensión de los conceptos básicos de C#. Desde variables y tipos de datos hasta estructuras de control y funciones simples, cada ejercicio está diseñado para desafiarte de manera gradual a medida que adquieres confianza en la codificación en C#.

  •  Escribir en un archivo de texto

    En este ejercicio de C#, se debe crear un programa que pida al usuario ingresar varias oraciones (hasta que presione Enter sin escribir nada) y almacene dichas oracio...

  •  Anexar a un archivo de texto

    En este ejercicio de C#, se debe crear un programa que pida al usuario ingresar varias oraciones (hasta que presione Enter sin escribir nada) y almacene esas oracione...

  •  Mostrar el contenido del archivo

    ejercicio de C#, se debe crear un programa que muestre todo el contenido de un archivo de texto en la pantalla. El nombre del archivo será ingresado a través de la lí...

  •  Expandir TextToHTML (archivos)

    En este ejercicio de C#, se debe expandir la clase TextToHtml para que pueda volcar su resultado en un archivo de texto. Se debe crear un método ToFile,...

  •  Registrador

    En este ejercicio de C#, se debe crear una clase Logger con un método estático Write, que agregue un texto determinado a un archivo de log. El método de...

  •  More

    En este ejercicio de C#, se debe crear un programa que simule el comportamiento del comando Unix "more". Este programa debe mostrar el contenido de un archivo ...