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.