Das BMP-Format

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