Visor BMP de consola V2 - Python Programming Exercise

En este ejercicio, desarrollarás un programa en Python para crear una utilidad que muestre un archivo BMP de 72x24 en la consola. Este ejercicio es perfecto para practicar el manejo de archivos, la manipulación de bytes y la visualización de datos en Python. Al implementar este programa, obtendrás experiencia práctica en el manejo de operaciones de archivos, manipulación de bytes y visualización de datos en Python. Este ejercicio no solo refuerza tu comprensión del manejo de archivos, sino que también te ayuda a desarrollar prácticas de codificación eficientes para gestionar las interacciones con el usuario. Además, este ejercicio proporciona una excelente oportunidad para explorar la versatilidad de Python en aplicaciones del mundo real. Al trabajar con el manejo de archivos, la manipulación de bytes y la visualización de datos, aprenderás a estructurar tu código de manera eficiente, lo cual es una habilidad crucial en muchos escenarios de programación. Este ejercicio también te anima a pensar críticamente sobre cómo estructurar tu código para la legibilidad y el rendimiento, convirtiéndolo en una valiosa adición a tu portafolio de programación. Ya seas un principiante o un programador experimentado, este ejercicio te ayudará a profundizar tu comprensión de Python y mejorar tus habilidades para resolver problemas.

 Categoría

Administrar archivos

 Ejercicio

Visor BMP De Consola V2

 Objectivo

Desarrolla un programa Python para crear una utilidad que muestre un archivo BMP de 72x24 en la consola. Utiliza la información del encabezado BMP (consulta el ejercicio del 7 de febrero). Presta atención al campo denominado "inicio de los datos de la imagen". Después de esa posición, encontrarás los píxeles de la imagen. Puedes ignorar la información sobre la paleta de colores y dibujar una "X" cuando el color sea 255, y un espacio en blanco si el color es diferente.

Nota: Puedes crear una imagen de prueba con los siguientes pasos en Paint para Windows: abre Paint, crea una nueva imagen, cambia sus propiedades en el menú Archivo para que sea una imagen en color, ancho 72, alto 24, y guárdala como "mapa de bits de 256 colores (BMP)".

 Ejemplo de ejercicio de Python

 Copiar código Python
import sys

def read_bmp_header(filename):
    """
    Reads the BMP header and validates that it is a 72x24 BMP file.
    Returns the start of image data and the dimensions.
    """
    try:
        with open(filename, "rb") as file:
            # Check the BMP signature (first two bytes should be 'BM')
            signature = file.read(2)
            if signature != b'BM':
                raise ValueError("The file is not a valid BMP file.")
            
            # Skip to width and height in the BMP header
            file.seek(18)
            width = int.from_bytes(file.read(4), byteorder='little')
            height = int.from_bytes(file.read(4), byteorder='little')

            if width != 72 or height != 24:
                raise ValueError("This program only supports BMP files with dimensions 72x24.")

            # Skip to the start of image data
            file.seek(10)
            start_of_data = int.from_bytes(file.read(4), byteorder='little')

            return start_of_data, width, height

    except FileNotFoundError:
        print(f"Error: File '{filename}' not found.")
        sys.exit(1)
    except Exception as e:
        print(f"Error: {str(e)}")
        sys.exit(1)


def read_bmp_data(filename, start_of_data, width, height):
    """
    Reads the image data from the BMP file starting at the specified position.
    Returns the pixel data as a 2D list.
    """
    try:
        with open(filename, "rb") as file:
            # Go to the start of the image data
            file.seek(start_of_data)
            
            # Read the image data into a 2D list
            pixels = []
            row_size = (width + 3) // 4 * 4  # Each row must be a multiple of 4 bytes
            for _ in range(height):
                row = list(file.read(row_size))[:width]
                pixels.append(row)

            return pixels[::-1]  # BMP stores rows bottom-to-top

    except Exception as e:
        print(f"Error while reading image data: {str(e)}")
        sys.exit(1)


def display_bmp_image(pixels):
    """
    Displays the BMP image on the console using 'X' for 255 and ' ' for other values.
    """
    for row in pixels:
        line = ''.join('X' if pixel == 255 else ' ' for pixel in row)
        print(line)


if __name__ == "__main__":
    # Ensure the filename is provided as a command-line argument
    if len(sys.argv) != 2:
        print("Usage: python bmp_viewer.py ")
        sys.exit(1)

    filename = sys.argv[1]

    # Read BMP header
    start_of_data, width, height = read_bmp_header(filename)

    # Read BMP image data
    pixels = read_bmp_data(filename, start_of_data, width, height)

    # Display the image
    display_bmp_image(pixels)

 Output

Execution:

python bmp_viewer.py example.bmp

Output:

X X X X X X 
 X X X X X X
X X X X X X 
 X X X X X X
...

 Comparte este ejercicio de Python

 Más Ejercicios Programación Python de Administrar archivos

¡Explora nuestro conjunto de ejercicios de programación Python! Estos ejercicios, diseñados específicamente para principiantes, te ayudarán a desarrollar una sólida comprensión de los conceptos básicos de Python. 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 Python.

  •  Guardar datos en un archivo de texto

    En este ejercicio, desarrollarás un programa en Python para recopilar múltiples oraciones del usuario (continuando hasta que el usuario presione Enter sin escribir na...

  •  Agregar contenido a un archivo de texto

    En este ejercicio, desarrollarás un programa en Python que solicita al usuario que ingrese múltiples oraciones, deteniéndose cuando presionen Enter sin escribir nada....

  •  Mostrar datos de archivo

    En este ejercicio, desarrollarás un programa en Python para leer y mostrar el contenido de un archivo de texto. Este ejercicio es perfecto para practicar el ma...

  •  TextToHTML con integración de archivos

    En este ejercicio, desarrollarás un programa en Python para mejorar la clase TextToHTML añadiendo la capacidad de guardar sus resultados en un archivo de texto. Este ...

  •  Manipulador de registros

    En este ejercicio, desarrollarás un programa en Python con una clase llamada Logger, que incluye un método estático llamado log. Este ejercicio es perfecto par...

  •  Clase Más

    En este ejercicio, desarrollarás un programa en Python que imita el comportamiento del comando "more" de Unix. Este ejercicio es perfecto para practicar el man...