Entwickler-Ecke
Dateizugriff - Bilder in Stream speichern und wieder auslesen
Furious_Dragon - Sa 05.09.09 23:13
Titel: Bilder in Stream speichern und wieder auslesen
Hallo
nachdem mir eben/ vorhin schon super geholfen wurde hab ich die Hoffnung das es jetzt wieder so super funktioniert.
Vorweg: ICH HABE DIE SUCHE BENUTZT ;) und habe auch ne ganze Menge gefunden nur leider nicht das was ich suche also wenn jemand hierzu den passenden Artikel kennt darf er mich auch gerne dahin verweisen!
Zu meinem Problem:
Ich würde gerne Bilder über einen Stream (über den auch eine ganze Menge andere Daten gespeichert werden) in eine Datei speichern.
Das erste Laden aus einer Bilddatei sieht in etwa so aus:
(e.Bild ist natürlich von TPicture)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var bild:TPicture; begin if(OpenPictureDialog1.Execute) then begin bild := TPicture.Create; bild.LoadFromFile(OpenPictureDialog1.FileName); Img_n_Bild.Picture := bild; e.Bild := bild; end; end; |
Beim speichern in den Stream komme ich nicht weiter... TPicture hat unter z.B. Bitmap Methoden wie SaveToStream nur leider unter Picture nicht wie kann ich also das Bild einfach in der Datei speichern?
Danke schonmal für eure Hilfe!
Furious_Dragon - Mo 07.09.09 11:09
Kennt sich keiner damit aus oder hab ich die Frage undklar gestellt?
jaenicke - Mo 07.09.09 22:18
Du wirst da schon nach Dateityp unterscheiden müssen, denn du musst ja beim Laden auch wieder das korrekt machen. Schließlich kann TPicture aus einem Stream den Dateityp nicht erkennen.
Also musst du selbst schauen, dann du nach Jpeg, Bitmap, ... unterscheidest und dementsprechend alles machen.
Sprint - Di 08.09.09 11:07
Furious_Dragon hat folgendes geschrieben : |
Beim speichern in den Stream komme ich nicht weiter... TPicture hat unter z.B. Bitmap Methoden wie SaveToStream nur leider unter Picture nicht wie kann ich also das Bild einfach in der Datei speichern? |
TPicture.Graphic.SaveToStream
Furious_Dragon - Do 10.09.09 13:08
Also habs jetzt mit Graphic gemacht (scheint auch zu funktionieren - zumindest sagt mir die Dateigröße das etwas in der richtigen Größe geschrieben wurde) nur beim auslesen bekomm ich ein Fehler.
Delphi-Quelltext
1: 2:
| e.Bild := TPicture.Create; e.Bild.Graphic.LoadFromStream(stream); |
hier bekomm ich eine EAccessViolation Exception Zugriffsverletzung beim Lesen von Adresse 0 woran kann das liegen?
jaenicke - Do 10.09.09 13:11
Weil Graphic noch gar nicht erzeugt wurde. Ich sagte ja oben schon: Woher soll denn die Komponente (ohne Dateierweiterung wie bei LoadFromFile) wissen was für ein Bild da in dem Stream liegt?!?
Du musst da schon die korrekte Klasse erzeugen (TBitmap, TJpegImage, ...) und dann damit den Stream laden.
Furious_Dragon - Do 10.09.09 13:21
Ahhh... jetzt hab ich es verstanden :idea:
OK funktioniert danke...
Furious_Dragon - So 13.09.09 23:51
Na toll was kann ich falsch gemacht haben?
Hab irgendwo irgendwas geändert im Programm bis vorhin hat alles soweit funktioniert und jetzt hab ich das Gefühl das er mit dem Stream durcheinander kommt.
zum Speichern nutze ich einfach die Methode SaveToStream von TPicture.Graphics
Delphi-Quelltext
1:
| e.Bild.graphic.SaveToStream(Stream); |
und ich lade das ganze wieder mit
Delphi-Quelltext
1: 2: 3:
| e.Bild := Tpicture.Create; e.Bild.Graphic := TJpegImage.Create; e.Bild.Graphic.LoadFromStream(stream); |
wenn ich das Bild über LoadFromStream geladen habe fängt er wieder am Anfang des Stream an also scheint irgendwas falsch zu laufen... Lief es vorher nur durch zufall? Hab ich irgendwo ein Fehler?
(Ich lade in das image ein jpeg File sollte dann doch richtig sein oder macht er intern doch wieder was von dem ich nichts weiß?)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!