Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi (monochromes) BMP --> RAW (https://www.delphipraxis.net/124667-monochromes-bmp-raw.html)

Mr Whoopee 22. Nov 2008 18:29


(monochromes) BMP --> RAW
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.

igel457 22. Nov 2008 18:35

Re: (monochromes) BMP --> RAW
 
Bei zwei Farben ist ein Pixel nicht 1 Byte, sondern ein Bit breit. Versuche mal ein

Delphi-Quellcode:
bmp.PixelFormat := pf8Bit;

Mr Whoopee 22. Nov 2008 18:40

Re: (monochromes) BMP --> RAW
 
Zitat:

Zitat von igel457
Bei zwei Farben ist ein Pixel nicht 1 Byte, sondern ein Bit breit. Versuche mal ein

Delphi-Quellcode:
bmp.PixelFormat := pf8Bit;

Der Wahnsinn! Das war's! Danke! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz