Mostrar BPM en la consola Curso de Programación Visual Basic

Lección:

Administración de Archivos


Ejercicio:

Mostrar BPM en la consola 7


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