![]() |
Re: Image senden - Bin kurz vorm verzweifeln
Zitat:
Ich hab es auch da nicht hinbekommen, dass der Stream von dem Image selbst kommt... Zumal funktioniert mein Programm ja auch, wenn es sich in einer einzigen Datei befindet (aber was für einen Sinn macht das schon?). |
Re: Image senden - Bin kurz vorm verzweifeln
Ich hab mich mit dem Thema und dem oben genannten Link nochmal weiter beschäftigt und versucht, ein JPEG, welches sich in einem Image befindet, zu versenden (also kein gespeichertes).
Doch selbst das funktioniert nicht... Hier der Quelltext:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var jpg: TJPEGImage; begin jpg:=TJPEGImage.Create; jpg.Assign(form1.Image2.Picture.Bitmap); jpg.SaveToStream(sM); sM.Position:=0; try ClientSocket1.Socket.SendText(IntToStr(sM.Size)); finally jpg.Free; end; end; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var rL: Integer; jPic: TJPEGImage; begin rL := Socket.ReceiveLength; // rL die Größe der empfangen Daten zuweisen If rL = 0 then Exit; // Es kann sein das nix ankommt, das wäre schlecht ;) If Rec then begin // Wenn im Receive-Mode: Socket.ReceiveBuf(Pointer(Int64(rM.Memory) + rM.Position)^, rL); rM.Position := rM.Position + rL; // Position setzen If rM.Position = rSize then // Wenn Datei vollständig: begin rM.Position := 0; // Position auf Null setzen, WICHTIG! jPic := TJPEGImage.Create; // JPEG-Bild erzeugen try jPic.LoadFromStream(rM); // Bild vom Stream laden Image1.Picture.Assign(jPic); // Bild in das Image1 laden finally jPic.Free; // JPEG-Bild wieder fregeben end; rM.Clear; // Stream leeren Label1.Caption := 'Übertragung fertig'; Rec := False; // aus den Receive-Mode gehen end; end else begin rSize := StrToInt(Socket.ReceiveText); // rSize die Größe der Datei zuweißen rM.SetSize(rSize); // Speicher reservieren rM.Position := 0; // Position auf Null setzen Rec := True; // Auf Receive-Mode stellen Socket.SendText('ok'); // Bestätigung senden end; end; procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin If Socket.ReceiveText = 'ok' then Socket.SendBuf(sM.Memory^, sM.Size); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 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