Ejercicio
Mostrar BPM En La Consola
Objectivo
El formato Netpbm es una familia de formatos de archivo de imagen diseñados teniendo en cuenta la simplicidad, en lugar de un tamaño pequeño. Pueden representar imágenes en color, en escala de grises o BW utilizando texto sin formato (aunque exista una variante binaria).
Por ejemplo, una imagen en blanco y negro codificada en ASCII se representa utilizando el encabezado "P1".
La siguiente línea (opcional) puede ser un comentario, precedido de #.
La siguiente línea contiene el ancho y el alto de la imagen.
Las líneas restantes contienen los datos: 1 para los puntos negros 0 para los puntos blancos, como en este ejemplo:
P1
# Este es un mapa de bits de ejemplo de la letra "J"
6 10
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
1 0 0 0 1 0
0 1 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
(ese sería el contenido de un archivo llamado "j.pbm").
Cree un programa para decodificar un archivo de imagen como este y mostrarlo en la pantalla, utilizando solo la consola. Recuerda que el comentario es opcional.
Ejemplo Ejercicio C#
Mostrar Código C#
// Import the System namespace for basic input/output operations
using System;
// Import the System.IO namespace for file operations
using System.IO;
// Declare the main Program class
class Program
{
// Main method where the program starts
static void Main()
{
// Specify the path to the PBM image file
string filePath = "j.pbm"; // Replace this with the path to your PBM file
// Try to read and display the PBM file content
try
{
// Open the file using StreamReader to read text from the PBM file
using (StreamReader reader = new StreamReader(filePath))
{
// Read the first line, which should be "P1" (PBM header)
string header = reader.ReadLine();
if (header != "P1") // Check if the header is "P1"
{
Console.WriteLine("Invalid PBM format. Expected 'P1'.");
return; // Exit the program if the header is not correct
}
// Read the optional comment line (skip it)
string commentLine = reader.ReadLine();
while (commentLine.StartsWith("#")) // Check if the line starts with "#"
{
commentLine = reader.ReadLine(); // Read the next line if it's a comment
}
// Read the width and height of the image
string[] dimensions = commentLine.Split(' '); // Split the dimensions by space
int width = int.Parse(dimensions[0]); // First element is the width
int height = int.Parse(dimensions[1]); // Second element is the height
// Print a message to inform the user about the image size
Console.WriteLine($"Image dimensions: {width} x {height}");
// Loop through each row of pixels and print it to the console
for (int y = 0; y < height; y++) // Loop through each row
{
// Read the next line, which contains the pixel data for the row
string row = reader.ReadLine();
string[] pixels = row.Split(' '); // Split the row into individual pixel values
// Loop through each pixel in the row
for (int x = 0; x < width; x++) // Loop through each pixel in the row
{
// Check the pixel value: 0 means white, 1 means black
if (pixels[x] == "1")
{
Console.Write("X"); // Display 'X' for black pixels
}
else
{
Console.Write(" "); // Display a space for white pixels
}
}
Console.WriteLine(); // Move to the next line after printing the row
}
}
}
catch (Exception ex) // Catch any errors that may occur during file reading
{
// Print the error message to the console
Console.WriteLine($"Error reading the file: {ex.Message}");
}
}
}
Salida
Input: The PBM file j.pbm contains the following:
P1
# Simple image example
5 4
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
Output: The program will display the following in the console:
Image dimensions: 5 x 4
X X X
X X
X X X
X X
Example Error Handling:
Error reading the file: The system cannot find the file specified.
Código de Ejemplo Copiado!
Comparte este Ejercicio C# Sharp