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
Hier: http://www.runicsoft.com/bmp.php#chapter3

Und hier: http://www.fastgraph.com/help/bmp_header_format.html

Einen Loader hab ich dafür auch, allerdings nur in C++.

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 :allright:

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 :allright:.

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

KeyKon