AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi (monochromes) BMP --> RAW
Thema durchsuchen
Ansicht
Themen-Optionen

(monochromes) BMP --> RAW

Ein Thema von Mr Whoopee · begonnen am 22. Nov 2008 · letzter Beitrag vom 22. Nov 2008
Antwort Antwort
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
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: (monochromes) BMP --> RAW

  Alt 22. Nov 2008, 19:35
Bei zwei Farben ist ein Pixel nicht 1 Byte, sondern ein Bit breit. Versuche mal ein

bmp.PixelFormat := pf8Bit;
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Mr Whoopee

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

Re: (monochromes) BMP --> RAW

  Alt 22. Nov 2008, 19:40
Zitat von igel457:
Bei zwei Farben ist ein Pixel nicht 1 Byte, sondern ein Bit breit. Versuche mal ein

bmp.PixelFormat := pf8Bit;
Der Wahnsinn! Das war's! Danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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