![]() |
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. |
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 ![]() 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! |
Re: Bild in einer file-datei speichern
Sonst: Das Bitmap stellt normalerweise
![]() und ![]() bereit ... (Sollte imho jede Klasse machen ...) |
Re: Bild in einer file-datei speichern
Er will nur einen Datensatz speichern?
Dann habe ich wohl etwas falsch verstanden... :gruebel: |
Re: Bild in einer file-datei speichern
Zitat:
Wenn man eine Variable Anzahl an Bildern hat, macht man einfach
Delphi-Quellcode:
bzw.
Stream.Write (Count, sizeOf (Count));
for i := 0 to Count - 1 do Bitmap.savetostream (Stream);
Delphi-Quellcode:
Stream.read (Count, sizeOf (Count));
for i := 0 to Count - 1 do Bitmap.loadfromstream (Stream); |
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:
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.
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; 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 20:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz