AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild in einer file-datei speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Bild in einer file-datei speichern

Offene Frage von "Marvel"
Ein Thema von Marvel · begonnen am 6. Feb 2005 · letzter Beitrag vom 6. Feb 2005
Antwort Antwort
Marvel

Registriert seit: 12. Nov 2004
Ort: Bad Düben
64 Beiträge
 
#1

Bild in einer file-datei speichern

  Alt 6. Feb 2005, 13:41
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.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Bild in einer file-datei speichern

  Alt 6. Feb 2005, 14:02
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. )
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!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Bild in einer file-datei speichern

  Alt 6. Feb 2005, 15:03
Sonst: Das Bitmap stellt normalerweise
Delphi-Referenz durchsuchenSaveToStream
und
Delphi-Referenz durchsuchenLoadFromStream
bereit ...

(Sollte imho jede Klasse machen ...)
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Bild in einer file-datei speichern

  Alt 6. Feb 2005, 15:09
Er will nur einen Datensatz speichern?
Dann habe ich wohl etwas falsch verstanden...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Bild in einer file-datei speichern

  Alt 6. Feb 2005, 15:16
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);
  Mit Zitat antworten Zitat
Benutzerbild von VirusXP
VirusXP

Registriert seit: 29. Dez 2003
Ort: Ingolstadt
33 Beiträge
 
Delphi 2007 Professional
 
#6
  Alt 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.
Für die einen ist Windows nur ein Betriebssystem, für die anderen ist es der größte Virus der Welt.
  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 14:04 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