Para consultar información acerca de los distintos formatos gráficos:
http://es.wikipedia.org/wiki/Anexo:Formatos_de_archivo_de_gr%C3%A1ficos
Para acceder a los datos solo es preciso conocer que tipo de dato hay escrito en cada posición del fichero, una vez conocidos esos datos solo es preciso leerlos, mediante un BinaryReader.
La estructura del fichero se puede consultar en:
http://es.wikipedia.org/wiki/Windows_bitmap
A continuación se muestra el resumen de los datos que ofrece la wikipedia.
Bytes | Información |
---|---|
0, 1 | Tipo de fichero "BM" |
2, 3, 4, 5 | Tamaño del archivo |
6, 7 | Reservado |
8, 9 | Reservado |
10, 11, 12, 13 | Inicio de los datos de la imagen |
14, 15, 16, 17 | Tamaño de la cabecera del bitmap |
18, 19, 20, 21 | Anchura (píxels) |
22, 23, 24, 25 | Altura (píxels) |
26, 27 | Número de planos |
28, 29 | Tamaño de cada punto |
30, 31, 32, 33 | Compresión (0=no comprimido) |
34, 35, 36, 37 | Tamaño de la imagen |
38, 39, 40, 41 | Resolución horizontal |
42, 43, 44, 45 | Resolución vertical |
46, 47, 48, 49 | Tamaño de la tabla de color |
50, 51, 52, 53 | Contador de colores importantes |
El resultado final de la aplicación será el siguiente:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - CODIGO DE LA APLICACIÓN - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Public Structure CabeceraDelArchivo
Public Tipo1 As Byte
Public Tipo2 As Byte
Public Tamano As Integer
Public Reservado1 As Short
Public Reservado2 As Short
Public Desplazamiento As Integer
End Structure
Public Structure CabeceraDeLaImagen
Public Tamano As Integer
Public Ancho As Integer
Public Alto As Integer
Public Planos As Short
Public Bits As Short
Public Compresion As Integer
Public TamanoDeLaImagen As Integer
Public XPuntosPorMetro As Integer
Public YPuntosPorMetro As Integer
Public ColoresUsados As Integer
Public ColoresImportantes As Integer
End Structure
Private Sub btnAbrirMapaDeBits_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbrirMapaDeBits.Click
OpenFileDialog1.Filter = "Mapas de bits|*.bmp"
OpenFileDialog1.ShowDialog()
'Se carga la imagen en el control PictureBox
PictureBox1.ImageLocation = OpenFileDialog1.FileName
'Se crea una variable de cada tipo de estructura
Dim CabeceraArchivo As CabeceraDelArchivo
Dim CabeceraImagen As CabeceraDeLaImagen
'Se abre mediante un lector binario el fichero BMP de la imagen
Dim fichero As New BinaryReader(File.Open(OpenFileDialog1.FileName, FileMode.Open))
'Se rellenan los datos de la estructura correspondiente a la cabecera del archivo
CabeceraArchivo.Tipo1 = fichero.ReadByte()
CabeceraArchivo.Tipo2 = fichero.ReadByte()
CabeceraArchivo.Tamano = CInt(fichero.ReadUInt32())
CabeceraArchivo.Reservado1 = fichero.ReadInt16()
CabeceraArchivo.Reservado2 = fichero.ReadInt16()
CabeceraArchivo.Desplazamiento = fichero.ReadInt32()
'Se rellenan los datos de la estructura correspondiente a la cabecera de la imagen
CabeceraImagen.Tamano = fichero.ReadInt32()
CabeceraImagen.Ancho = fichero.ReadInt32()
CabeceraImagen.Alto = fichero.ReadInt32()
CabeceraImagen.Planos = fichero.ReadInt16()
CabeceraImagen.Bits = fichero.ReadInt16()
CabeceraImagen.Compresion = fichero.ReadInt32()
CabeceraImagen.TamanoDeLaImagen = fichero.ReadInt32()
CabeceraImagen.XPuntosPorMetro = fichero.ReadInt32()
CabeceraImagen.YPuntosPorMetro = fichero.ReadInt32()
CabeceraImagen.ColoresUsados = fichero.ReadInt32()
CabeceraImagen.ColoresImportantes = fichero.ReadInt32()
'Se cierra el fichero
fichero.Close()
'Se escribe en el TextBox1 todos los datos leidos del fichero
TextBox1.Text = "Cabecera del archivo" & vbCrLf & "------------------------------" & vbCrLf
TextBox1.Text = TextBox1.Text & _
"Tipo: " & Chr(CabeceraArchivo.Tipo1) & Chr(CabeceraArchivo.Tipo2) & vbCrLf & "Tamano: " & CabeceraArchivo.Tamano & vbCrLf & _
"Reservado1: " & CabeceraArchivo.Reservado1 & vbCrLf & "Reservado2: " & CabeceraArchivo.Reservado2 & vbCrLf & _
"Desplazamiento: " & CabeceraArchivo.Desplazamiento & vbCrLf & vbCrLf
TextBox1.Text = TextBox1.Text & "Cabecera de la imagen" & vbCrLf & "------------------------------" & vbCrLf
TextBox1.Text = TextBox1.Text & _
"Tamano: " & CabeceraImagen.Tamano & vbCrLf & _
"Ancho: " & CabeceraImagen.Ancho & vbCrLf & _
"Alto: " & CabeceraImagen.Alto & vbCrLf & _
"Planos: " & CabeceraImagen.Planos & vbCrLf & _
"Bits: " & CabeceraImagen.Bits & vbCrLf & _
"Compresion: " & CabeceraImagen.Compresion & vbCrLf & _
"TamanoDeLaImagen: " & CabeceraImagen.TamanoDeLaImagen & vbCrLf & _
"XPuntosPorMetro: " & CabeceraImagen.XPuntosPorMetro & vbCrLf & _
"YPuntosPorMetro: " & CabeceraImagen.YPuntosPorMetro & vbCrLf & _
"ColoresUsados: " & CabeceraImagen.ColoresUsados & vbCrLf & _
"ColoresImportantes: " & CabeceraImagen.ColoresImportantes & vbCrLf
End Sub
No hay comentarios:
Publicar un comentario