000
10.09.2001, 17:48
Retro
|
Hollerö, ich hab da seit längerem nen Problem:
Ich hab schön öfters versucht das Bild aus einer TImage Komponente in einen FileStream mit anderen Variablen (Integer / String) zu speichern... leider will das nicht so richtig funktionieren.
Also hier erstmal der Sourcecode:unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
const STREAM_FILE = 'Stream.txt';
type // Bild-Record TDatensatz = record Text: string[50]; Bild: TBitmap; end; // Formular TForm1 = class(TForm) Image1: TImage; Button1: TButton; Button2: TButton; Memo1: TMemo; Button5: TButton; OpenDialog1: TOpenDialog; Button4: TButton; Button3: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private-Deklarationen } Daten: TDatensatz; procedure WriteInit; procedure ReadInit; procedure Write(filename: string); procedure Read(filename: string); public { Public-Deklarationen } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject); begin if FileExists(STREAM_FILE) then begin Read(STREAM_FILE); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin Write(STREAM_FILE); end;
procedure TForm1.WriteInit; begin with Daten do begin Text := Memo1.Lines.Text; Bild := Image1.Picture.Bitmap; end; end;
procedure TForm1.ReadInit; begin with Daten do begin Memo1.Lines.Text := Text; Image1.Picture.Bitmap := Bild; end; end;
procedure TForm1.Write(filename: String); var Stream: TFileStream; begin WriteInit; Stream := TFileStream.Create(filename, fmCreate); Stream.Write(Daten, sizeof(TDatensatz)); Stream.Free; end;
procedure TForm1.Read(filename: String); var Stream: TFileStream; begin Stream := TFileStream.Create(filename, fmOpenRead); Stream.Read(Daten, sizeof(TDatensatz)); ReadInit; Stream.Free; end;
// Reset procedure TForm1.Button5Click(Sender: TObject); begin Image1.Picture := NIL; end;
procedure TForm1.Button4Click(Sender: TObject); begin Memo1.Lines.Text := ''; end;
// Bild laden procedure TForm1.Button3Click(Sender: TObject); begin if OpenDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenDialog1.FileName); end; end;
end.
So, das ganze gibts auch als Zip: http://www.m249.de/imagestream.zip
Und die Funktionen der Programm sind ja sehr simpel - soll auch nur zum testen dienen. Nur wenn ich jetzt ein Bild lade, und nun den Stream speichere oder ihn wieder öffnen will, kommen Fehler. Der Text wird trotzdem geladen, aber das Bild nicht. Wenn man sich die Stream.txt anguckt, steht dort auch nur der String drinne, vom Bild keine Spur.
Ich habe es schon mit TPicture / TBitmap / TImage / Bitmap ausprobiert, aber nichts davon bringt mich weiter...
Also entweder hab ich nen Brett vorm Kopf, oder es geht nicht (so einfach).
Tja, und das ist mein Problem, ich weis das TImage eine eigene Routine besitzt Image1.Picture.Bitmap.SaveToStream(); Aber dies ist ja für MemoryStreams...
=> Grr... alles nur unnütze C++ler hier, die verbrauchen nur Sauerstoff *fg* ;D
--
shielding people from their own stupidity is an evolutionary step backwards anyway.
/* God is dead!............Nietzsche */ /* Nietzsche is dead!......God */ /* Nietzsche is God!.......The Dead */
Dieser Beitrag wurde am 10.09.2001 um 22:13 von Retro bearbeitet.
|
|
Profil || Suche
|
001
11.09.2001, 21:47
Konrad
|
Ich weiss zwar nich was ein Stream is und was er bringt aber es sieht so aus als wolltest du ein Bitmap UND ein String in eine Datei speichern. Hmm. Unter Pascal konnte man noch records speichern (unter delphi auch) aber da is ja ne klasse mit drin.. Schreib dir doch schnell ein eigenes Bitmap-Speicherverfahren. Das ist doch auch cool. (und mit Paintbrush kannste die sowieso nich lesen)
[code] TColoredPoint = record x,y : Integer; c : TColor; end; pixels = array[1..100,1..100] of TColoredPoint; TStringPicture = record p : pixels; s : string; end; // so - ohne klassen - wie bei pascal - aaah! [/code]
Die speicherfunktion bzw. ladefunktion schreibste halt mit Hilfe von Canvas.Pixels dann geht das.
--
eigentlich heisse ich [UHK]Hostage
|
|
Profil || Suche
|