Einzelnen Beitrag anzeigen

Mr Whoopee

Registriert seit: 28. Jun 2004
73 Beiträge
 
#1

(monochromes) BMP --> RAW

  Alt 22. Nov 2008, 19:29
Hallo,
wie kann ich möglichst unkompliziert und einfach ein monochromes Bitmap (2 Farben: schwarz & weiß) in eine headerlose RAW Datei speichern?
Die zu ladene BMP wird in jedem Fall 700*700 groß sein.
Etwas rumexperimentiert habe ich auch schon, aber irgendwie ist das Ergebnis fehlerhaft.
Die zu erwartene Dateigröße liegt bei 490.000 Bytes, was auch bei der erstellten Datei der Fall ist. Also muss irgendwas an meiner Konvertierfunktion falsch sein.

Zur meinem Gedankengang:
- monochomes Bitmap laden
- jede Zeile mit Scanline() scannen und je nach Pixelfarbe den Wert "0" für schwarz und "255" für weiß erst in ein Array, dann in die Datei schreiben.

Ursprungsbild:
http://img296.imageshack.us/img296/6827/ursprunglu9.png
Resultat:
http://img141.imageshack.us/img141/7...lerhaftdg9.png

Quelltext:
Delphi-Quellcode:
...
var
  Form1: TForm1;
  farben: array[0..699] of byte;
  bmp: TBitmap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
bmp:=TBitmap.Create;
bmp:=image1.Picture.Bitmap; //das bild ist schon im TImage geladen
end;

procedure TForm1.Button1Click(Sender: TObject);
var p: pByteArray;
    hoehe, breite: Integer;
    FileStream: TFileStream;
begin
FileStream:=TFileStream.Create('test.raw', fmCreate or fmOpenWrite);
for hoehe:=0 to 699 do
 begin
   p:=bmp.ScanLine[hoehe];
   for breite:=0 to 699 do
     begin
       if p[breite]=0 then farben[breite]:=0
       else if p[breite]=255 then farben[breite]:=255;
     end;
   FileStream.Write(farben, 700);
 end;
FileStream.Free;
end;

end.
Vielleicht weiß ja einer von Euch, was da schief läuft.

LG,
Whoopee

Edit: Ich habe ein Beispielprojekt mal angehängt.
Angehängte Dateien
Dateityp: zip bmp2raw_810.zip (27,0 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat