Hi !
Ich schreibe grade ein programm was
unter anderem Bilder einlesen muss.
Dafür habe ich die bilder erst immer im raw-format gespeichert (24bit). Da das aber
für einen enduser nicht zumutbar ist,
habe ich mir mal das bmp-format angesehen.
es schien mit nicht so schwer.
Aberich habe ein problem: irgendwie müssen
die anzahl der bytes eine bmp-datei (oder gar jeder einzelnen zeile ???) durch
vier teilbar sein. Das bereitet mir
kopfschmerzen, ich bekomme’s nicht
vernünftig hin !
Wer kann mir meinen (etas wirren) code
mal grade hinbiegen, sodas ich auch
bmp’s im format 3x3 pixel einlesen kann ?
(Bitte keine beschreibungen des bmp-formats schicken, die habe ich schon !)
Das Brogramm gibt die daten noch als html-datei aus, das ist aber zu ignorieren !
Private Sub CmdGo_Click()
If Not File.FileName = „“ Then
’ — --- — BMP Heder-Informationen — --- —
’ 14 Bytes Header (Hex 0E)
’ 40 Bytes Extra Header (Hex 28)
’ Offset 0x36: Beginn der Bildaten (Dez 54)
’ Offset 0x12 Bildbreite als LONG
’ Offset 0x16 Bildhöhe als LONG
’ Offset 0x1C Bit Per Pixel - Zahl (Farbtiefe)
’ Offset 0x1E Komprimierung (0=keine)
’ Offset 0x22 grösse in bytes als LONG
’ — --- — --- — --- — --- — --- — ---
InputFile = Dir.Path
If Not (Mid(InputFile, Len(InputFile))) = „“ Then
InputFile = InputFile & „“
End If
InputFile = InputFile & File.FileName
Open InputFile For Binary As #1
Open „C:\text.html“ For Output As #2
Get #1, OFFSET_BREITE, ByteTemp
filex = ByteTemp
Get #1, OFFSET_BREITE + 1, ByteTemp
filex = filex + ByteTemp * 256
Get #1, OFFSET_HOEHE, ByteTemp
filey = ByteTemp
Get #1, OFFSET_HOEHE + 1, ByteTemp
filey = filey + ByteTemp * 256
AnzeigeForm.ScaleMode = 3
AnzeigeForm.Width = 6000
AnzeigeForm.Height = 5000
AnzeigeForm.Show
MsgBox "Dateiformat: " & filex & " x " & filey
Filepos = filex * filey
Filepos = Filepos * 3
Filepos = Filepos + 54
Print #2, „“
Print #2, Title.Text
Print #2, „“
Print #2, "
"
Randomize Timer
For j = 1 To filey
For i = 1 To filex
Get #1, Filepos, rot
Filepos = Filepos - 1
Get #1, Filepos, gruen
Filepos = Filepos - 1
Get #1, Filepos, blau
Filepos = Filepos - 1
Bildspeicher(i, j, 1) = rot
Bildspeicher(i, j, 2) = gruen
Bildspeicher(i, j, 3) = blau
Next i
Next j
'MsgBox ".BMP-File eingelesen!"
For j = 1 To filey
For i = 1 To filex
Ausgabespeicher(filex - (i - 1), j, 1) = Bildspeicher(i, j, 1)
Ausgabespeicher(filex - (i - 1), j, 2) = Bildspeicher(i, j, 2)
Ausgabespeicher(filex - (i - 1), j, 3) = Bildspeicher(i, j, 3)
'Das da oben piegelt den Inhalt,
'da der anscheinen Spiegelverkehr in der datei ist ???
Next i
Next j
For j = 1 To filey
For i = 1 To filex
AnzeigeForm.PSet (i, j), RGB(Ausgabespeicher(i, j, 1), Ausgabespeicher(i, j, 2), Ausgabespeicher(i, j, 3))
Print #2, "";
Print #2, Chr(Int(Rnd \* 26 + 65));
Print #2, "";
Next i
Print #2, "
";
Next j
Print #2, ""
Close #1
Close #2
Else
Dim erg As Variant
erg = MsgBox("Keine gültige Datei ausgewählt!", vbCritical, "Fehler")
End If
End Sub