Seite 1 von 1
BMP-Aufbau
Verfasst: 14.12.2005 19:45
von KeyKon
Wie ist eigentlich eine BMP aufgebaut?
Hat vielleicht irgenjemand schonmal was zum Hand-Auslesen geschrieben?
Oder hat irgendjemand einen Link zu einer Seite wo das beschrieben wird?
KeyKon
Verfasst: 14.12.2005 19:57
von Ynnus
Verfasst: 14.12.2005 21:53
von Zaphod
bei formatfragen lohnt sich auch immer mal ein blick auf
www.wotsit.org
Verfasst: 17.12.2005 01:24
von KeyKon
thx

Verfasst: 21.12.2005 21:34
von KeyKon
Ich hab jetzt mal einen kleinen Loader geschrieben:
Code: Alles auswählen
If OpenFile(0,OpenFileRequester("Öffnen","","BMP|*.bmp|All|*.*",0)) = 0
Debug "Konnte nich öffnen!"
End
EndIf
If ReadWord() <> 19778 ;"BM"
Debug "Kein BMP File!"
End
EndIf
Debug "Size: "+Str(ReadLong())+" Byte"
If ReadWord() <> 0 Or ReadWord() <> 0
Debug "Error! bfReserved isn't 0"
End
EndIf
Debug "Size of Headers: "+Str(ReadLong())+" Bytes" ; 54
Debug "Size of the Structure: "+Str(ReadLong())+" Bytes" ; 40
XSize = ReadLong()
YSize = ReadLong()
Debug "Image Width: "+Str(XSize)+" Pixels"
Debug "Image Height: "+Str(YSize)+" Pixels"
Debug "BitPlanes: "+Str(ReadWord())
Debug "Resolution: "+Str(ReadWord())
Debug "Compression: "+Str(ReadLong())
Debug "Size of Image: "+Str(ReadLong())
Debug "Pixels per Meter X: "+Str(ReadLong())
Debug "Pixels per Meter Y: "+Str(ReadLong())
Debug "Colors Used: "+Str(ReadLong())
Debug "Important Colors: "+Str(ReadLong())
CreateImage(0,XSize,YSize)
; Structure prgb
; re.b
; gr.b
; bl.b
; EndStructure
; Dim Pic.prgb(XSize-1,YSize-1)
StartDrawing(ImageOutput())
For y = 0 To YSize-1
For x = 0 To XSize-1
Blue = ReadByte()&$FF
Green = ReadByte()&$FF
Red = ReadByte()&$FF
Plot(x,YSize-y-1,RGB(Red,Green,Blue))
; Pic(x,YSize-y-1)\re = Red-128
; Pic(x,YSize-y-1)\gr = Green-128
; Pic(x,YSize-y-1)\bl = Blue-128
; Debug Red
; Debug Green
; Debug Blue
Next
Next
StopDrawing()
If SaveImage(0,"Test.bmp") = 0
Debug "Fehler beim speichern!"
End
EndIf
Debug "Fertig"
Is bestimmt nich die schnellste möglichkeit, aber es funktioniert!
KeyKon
Verfasst: 22.12.2005 00:16
von MVXA
> es funktioniert!
Bei mir zumindest nicht ganz. Ich habe keine Ahnung wie dein Prozessor
das sieht aber meiner würde bei [c]Blue+256 [/c] am liebsten aus dem Sockel
springen und sich aus dem Fenster werfen.
Die IFs bitte komplett weg löschen und dafür die Bytes sofort so einlesen:
Code: Alles auswählen
Blue = ReadByte()&$FF
Green = ReadByte()&$FF
Red = ReadByte()&$FF
Im übrigen: Danke für den Code

.
Verfasst: 22.12.2005 02:06
von KeyKon
thx, is edited
KeyKon