Autor Beitrag
Furious_Dragon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 05.09.09 23:13 
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)
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 07.09.09 11:09 
Kennt sich keiner damit aus oder hab ich die Frage undklar gestellt?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Di 08.09.09 11:07 
user profile iconFurious_Dragon hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
Ciao, Sprint.
Furious_Dragon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Do 10.09.09 13:21 
Ahhh... jetzt hab ich es verstanden :idea:
OK funktioniert danke...
Furious_Dragon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
e.Bild.graphic.SaveToStream(Stream);					


und ich lade das ganze wieder mit
ausblenden 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ß?)