Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild in einer file-datei speichern (https://www.delphipraxis.net/39684-bild-einer-file-datei-speichern.html)

Marvel 6. Feb 2005 13:41


Bild in einer file-datei speichern
 
Hi,
Ich will in eine von mir erstellte Datei mit ein paar Zahlen und Zeichenketten drin noch ein Image einbinden.
Dazu hab ich erst mal in den Record-type für die file-Deklarierung einen Eintrag Bild:TBitmap geschrieben. Da hat er nicht rumgemeckert, was mich eigentlich verwundert hat, da er ja an sich für die files immer eine Festgelegte Größe haben will, wie z.B. String[10]... Wenn wer von euch Zeit hat und das weiß, kann er mir ja noch sagen, warum das da nich ist und wie man die Größe begrenzt...

Egal.. mein Problem ist eigentlich, dass ich später natürlich ein Bild in die Variable laden will, sonst wärs ja fürn Arsch... und zwar per Bild.LoadFromFile(soundso.bmp). Da meckert er aus für mich jetzt nicht wirklich erkennbaren Gründen rum.
Er sagt dann im Programm, wenn er das ausführen soll "Acces volation at address 0046D2F6 in Module 'Project1.exe'. Read of adress 00000000."


So. danke schonmal. Hoff mal, dass ich da nicht so in die Röhre guckt, wie ich.

Robert_G 6. Feb 2005 14:02

Re: Bild in einer file-datei speichern
 
TBitMap ist doch eine Klasse. Eine Instanz davon ist also nichts mehr. als ein 4 Byte großer Zeiger.
Genau den versuchst du da zu Speichern. Den zu laden macht natürlich keinen Sinn (genauso wenig wie ihn zu speichern. :mrgreen: )
Die Lösung für dein Problem nennt sich dpCollectiondpCollection.
Auf diesem Weg kannst du deinen Record aus deinem Projekt verbannen. (und den Array gleich dazu :) )

p.s.:Schaue dir auf jeden Fall die Beispiele an!

jfheins 6. Feb 2005 15:03

Re: Bild in einer file-datei speichern
 
Sonst: Das Bitmap stellt normalerweise
Delphi-Referenz durchsuchenSaveToStream
und
Delphi-Referenz durchsuchenLoadFromStream
bereit ...

(Sollte imho jede Klasse machen ...)

Robert_G 6. Feb 2005 15:09

Re: Bild in einer file-datei speichern
 
Er will nur einen Datensatz speichern?
Dann habe ich wohl etwas falsch verstanden... :gruebel:

jfheins 6. Feb 2005 15:16

Re: Bild in einer file-datei speichern
 
Zitat:

Ich will in eine von mir erstellte Datei mit ein paar Zahlen und Zeichenketten drin noch ein Image einbinden.
Einfach zuerst die ganzen anderen Daten speichern, und dann nochmal Bitmap.savetostream, und dann ab in die Datei.

Wenn man eine Variable Anzahl an Bildern hat, macht man einfach
Delphi-Quellcode:
Stream.Write (Count, sizeOf (Count));
for i := 0 to Count - 1 do
  Bitmap.savetostream (Stream);
bzw.
Delphi-Quellcode:
Stream.read (Count, sizeOf (Count));
for i := 0 to Count - 1 do
  Bitmap.loadfromstream (Stream);

VirusXP 6. Feb 2005 15:45

Ich hab des so gelöst, dass ich zwei Streams nehme (der eine als Speicherfile im anderen wird das Bild geladen, halt als Stream) dann kann man den BildStream mit Hilfe der CopyFrom-Prozedur in den andren Stream schreiben des sieht dann ungefähr so aus:
Code:
data:=TFileStream.Create(Filename,fmCreate or fmShareDenyNone);
bild:=TFileStream.Create(Filename des Bildes,fmOpenRead or fmShareDenyNone);
//Hier kommen diverse vorhergehende Infos in die Datei
data.writeBuffer(...);
//dann das Bild
Size:=bild.Size; //Als erstes die Size des bildes auslesen
data.writeBuffer(Size,sizeof(Size)); //dann diese in die File schreiben
data.CopyFrom(bild,Size); //dann das Bild mit CopyFrom einschreiben
//und zum Schluss alles wieder freilassen
data.free;
bild.free;
Die Size schreibe ich nur rein um später dann das Bild wieder korrekt über CopyFrom auslesen zu können (Zuerst die Size und dann das Bild über CopyFrom in einen Stream einlesen). Und ganz zum Schluss wenn man dann das Bild wieder in einem Stream vorliegen hat kann man es über LoadFromStream in ein TBitmap oder sonst was holen.
En bisschen kompliziert aber so hat man des Bild am Ende wieder in einem Stück. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 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