Delphi将图像发送到服务器

时间:2014-08-14 15:38:34

标签: image delphi indy

这不显示图像:

按钮发送图片:

procedure TForm1.Button3Click(Sender: TObject);
var
ms :TMemoryStream;
begin
try
ms := TMemoryStream.Create;
IdTCPClient2.Host:=Edit1.Text;
IdTCPClient2.Connect;
Image1.Bitmap.SaveToStream(ms);
ms.Position := 0;
IdTCPClient2.IOHandler.LargeStream := true;
IdTCPClient2.IOHandler.Write(ms,0,True);
finally
  IdTCPClient2.Disconnect;
end;
ms.Free;
end;

并且服务器执行

procedure TForm1.IdTCPServer2Execute(AContext: TIdContext);
var
ms:TMemoryStream;
size : Integer;
begin
 ms := TFileStream.Create;
 try
 ms.Position:= 0;
   AContext.Connection.IOHandler.LargeStream:=true;
   AContext.Connection.IOHandler.ReadStream(ms);
    ms.Position:=0;
   Image2.Bitmap.LoadFromStream(ms);
 finally
  ms.Free;
 end;
end;

有什么问题?

1 个答案:

答案 0 :(得分:3)

在工作线程的上下文中调用

OnExecute。您必须与主线程同步才能更新UI控件。例如:

procedure TForm1.IdTCPServer2Execute(AContext: TIdContext);
var
  ms:TMemoryStream;
begin
 ms := TMemoryStream.Create;
 try
   AContext.Connection.IOHandler.LargeStream:=true;
   AContext.Connection.IOHandler.ReadStream(ms);
   ms.Position := 0;
   TThread.Synchronize(nil,
     procedure
     begin
       Image2.Bitmap.LoadFromStream(ms);
     end
   );
 finally
  ms.Free;
 end;
end;