jpg aus stream direkt in Timage?
hallöchen
ich wüsste gern ob es möglich ist einen per socket versendeten stream direkt, also ohne zwischenspeichern auf der festplattte mit
Delphi-Quellcode:
in ein Timage zu laden.
stream.SaveToFile(pfad)
mit einer bitmap gelingt es mit durch ein tutorial gut:
Delphi-Quellcode:
mit einer jpeg datei gelingt mir dies nur leider nicht ohne lästiges zwischenspeichern.
Image.Picture.Bitmap.LoadFromStream(stream)
ich habe die unit 'jpeg' included, was allerdings auch nicht half. sry wenn das thema bereits öfters existiert, doch ich konnte nach einer halbstündigen suche keinen identischen fall finden. mfg toxic |
Re: jpg aus stream direkt in Timage?
Hallo Toxic,
hier ein Code-Auszug aus einem meiner Programme, wo ich ein ähnliches Problem hatte, zum experimentieren.
Delphi-Quellcode:
Viele Grüße Klaus
procedure ...
var TmpJpg : TJPEGImage; MS : TMemoryStream; begin .... TmpJpg := TJPEGImage.Create; try .... MS := TMemoryStream.Create; try TmpJpg.SaveToStream(MS); ..... TmpJpg.LoadFromStream(MS); ImageNach.Picture.Assign(TmpJpg); finally MS.Free; end; finally TmpJpg.Free; end; end; |
Re: jpg aus stream direkt in Timage?
ich weiß nicht was ich falsch mache, jedoch spuckt das kompilierte programm unverständliche fehlermeldungen in form von sinnlosen zeichenketten.
ich habe deinen code versucht wie folgt in einen vorgegeben code zu implementieren:
Delphi-Quellcode:
:wiejetzt:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var s, sl: string; TmpJpg : TJPEGImage; Reciving: boolean; DataSize: integer; Data: TMemoryStream; begin s:= Socket.ReceiveText; if not Reciving then begin SetLength(sl, StrLen(PChar(s))+1); // +1 for the null terminator StrLCopy(@sl[1], PChar(s), Length(sl)-1); DataSize:= StrToInt(sl); Data:= TMemoryStream.Create; TmpJpg := TJPEGImage.Create; Delete(s, 1, Length(sl)); Reciving:= true; end; try Data.Write(s[1], length(s)); if Data.Size = DataSize then begin Data.Position:= 0; TmpJpg.LoadFromStream(Data); Image2.Picture.Assign(TmpJpg); Data.Free; TmpJpg.Free; Reciving:= false; Socket.Close; end; except Data.Free; TmpJpg.Free; end; end; hat jemand eine idee was ich falsch mache? //edit habe den fehler glaub ich gefunden: das jpegimage muss vor der if-abfrage created werden. danke // edit 2 das war allerdings nicht der hauptgrund für die seltsamen fehlermeldungen: die variablen Reciving: boolean; DataSize: integer; Data: TMemoryStream; müssen allesamt global definiert werden. ist das plausibel & nur ich verstehs nicht? wenn ja klärt mich bitte auf! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 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