Autor Beitrag
jornbyte
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Fr 18.02.05 20:53 
Hallo Leute
Ich Quäle mich schon einige Zeit durch die Suche, finde aber keine richtige Lösung zu meinem Prob.
Für euch wird es bestimmt einfach,mir fehlt der richrige Lösungsansatz.
Ich habe ein *.bmp in das Image1 geladen und möchte die Bilddaten in Byte ausgeben
Beim bmp ist die Farbtiefe 1 Pixel, also ein reines S/W-Bild.
Ich versuche es mal hier zu Malen (* bedeutet Pixel gesetzt):
*-------
-*------
--*-----
---*----
----*---
-----*--
------*-
-------*

das Hex des Originals:
42 4D 60 00 00 00 00 00 00 00 3E 00 00 00 28 00
00 00 08 00 00 00 08 00 00 00 01 00 01 00 00 00
00 00 00 00 00 00 95 3A 00 00 95 3A 00 00 00 00
00 00 00 00 00 00 FF FF FF 00 00 00 00 00 01 00
00 00 01 00 00 00 04 00 00 00 08 00 00 00 10 00
00 00 20 00 00 00 40 00 00 00 80 00 00 00 00 00


Gespeicher mit Option: Zeilenfolge umkehren:
42 4D 60 00 00 00 00 00 00 00 3E 00 00 00 28 00
00 00 08 00 00 00 F8 FF FF FF 01 00 01 00 00 00
00 00 00 00 00 00 95 3A 00 00 95 3A 00 00 00 00
00 00 00 00 00 00 FF FF FF 00 00 00 00 00 80 00
00 00 40 00 00 00 20 00 00 00 10 00 00 00 08 00
00 00 04 00 00 00 02 00 00 00 01 00 00 00 00 00

Nun klebt da ja auch noch der Hedaer drann und die Farbinfo brauche ich auch nicht.
Mein gedanke war (oder ist) dieses Bild aus der Image1 zu speicher,
wobei das zu exportierende Textformat so aussehen muss:

.db 0x80
.db 0x40
.db.....

Ist das Bild nur 1 Zeile (besteht immer aus 8 Bit) und 24 pixel breit soll es so aussehen:
.db 0x80, 0x40, 0x20

Bei einem Bild mit der Auflösung von max. 320x240 sollen da 40 Byte in der Zeile und 240 untereinander sein, dass ist der größte zu erwatende Block, der kleinste ist 1 Byte.

Warum aus dem Image1? Ich habe da noch die möglichkeit des Invertierens eingebaut.

Mein Teilcode:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
//Datei speichern
procedure TForm1.Button3Click(Sender: TObject);
var
   endung: String;
   path: string;
   name: String;
   alles : string;
   Text: TStringList;
   filename:string;

begin
   endung := ExtractFileExt(OpenDialog1.Filename);
   name := ExtractFileName(OpenDialog1.Filename);
   path := ExtractFilePath(OpenDialog1.Filename);
   alles:= path+name;
    if path = '' then
    begin
    MessageDlg('erstmal ne Datei laden!', mtInformation,[mbOk], 0);
    end
    else
    begin
   // hier sollte die erzeugung der .db rein


  end;
    SaveDialog1.Filter := 'db Dateien (*.db)|*.db';
    SaveDialog1.DefaultExt := 'db';
    SaveDialog1.FileName:= (name)+'.db';
   if SaveDialog1.Execute then
   begin
   Memo1.Lines.SaveToFile(SaveDialog1.FileName);
   end;

end;


Ich hoffe auf viele Antworten und bedanke mich jetzt schon mal dafür.
mfg Jornbyte (der sehr lange nix mit Delphi gemacht hat)

_________________
mfg jornbyte
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 18.02.05 23:04 
Ich fasse kurz zusammen.
Dein Problem:
Zitat:

Ich habe ein *.bmp in das Image1 geladen und möchte die Bilddaten in Byte ausgeben. Beim bmp ist die Farbtiefe 1 Pixel.
(...)
wobei das zu exportierende Textformat so aussehen muss:
.db 0x80
.db 0x40
.db.....


Also, wenn ich es richtig verstanden habe, hast du ein 1-Bit Bitmap und willst an die "binären Rohdaten" ran kommen. Die willst du dann als Hex-Zahlen darstellen.

Am besten lädst du das Bild mit Image1.Picture.LoadFromFile, liest mit Image1.Picture.Bitmap.ScanLine die einzelnen Bytes raus und machst mit IntToHex Strings draus.
Das ganze noch nach deinen Wünschen zu formatieren schaffst du glaub ich dann selbst :)
jornbyte Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 19.02.05 16:12 
Der Tip mit Image1.Picture.Bitmap.ScanLine war prima.
Mal sehen, ob der Rest auch klappt :)

_________________
mfg jornbyte