Ejercicio
Mostrar BPM en la consola
Objetivo
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.
Código
Imports System
Imports System.IO
Class leerPBM
Public Shared Sub Main(ByVal args As String())
Dim fileName As String
Dim data As String
Dim line As String
Dim width As Integer
Dim height As Integer
Console.WriteLine("Enter the file name: ")
fileName = Console.ReadLine()
If Not fileName.Contains(".pbm") Then fileName += ".pbm"
If Not File.Exists(fileName) Then
Console.WriteLine("File not found!")
Return
End If
Try
Dim myFile As StreamReader = File.OpenText(fileName)
line = myFile.ReadLine()
If line <> "P1" Then
Console.WriteLine("Does not seem a B&W ASCII PBM")
Return
End If
Console.WriteLine("Found B&W ASCII PBM")
line = myFile.ReadLine()
If (line.Length > 1) AndAlso (line(0) = "#"c) Then
Console.WriteLine("Comment: " & line.Substring(1))
line = myFile.ReadLine()
End If
Dim widthheight As String() = line.Split(" "c)
width = Convert.ToInt32(widthheight(0))
height = Convert.ToInt32(widthheight(1))
Console.WriteLine("width: {0}", width)
Console.WriteLine("height: {0}", height)
data = ""
line = myFile.ReadLine()
While line IsNot Nothing
data += line
line = myFile.ReadLine()
End While
myFile.Close()
Catch problem As IOException
Console.WriteLine("File was not read properly")
Console.WriteLine("Details: {0}", problem.Message)
Return
End Try
data = data.Replace(" ", "")
Dim pos As Integer = 0
For Each symbol As Char In data
If pos Mod width = 0 Then Console.WriteLine()
If symbol = "1"c Then
Console.Write("X")
ElseIf symbol = "0"c Then
Console.Write(".")
End If
pos += 1
Next
Console.WriteLine()
End Sub
End Class