客服端描述:MyFirstBmp是内存流,已经存入了个32bit色的图片,发送到服务端的时候为什么服务端会主动关闭程序?发送8bit的图片就不会,而且能在TImage画布出来
客服端发送图片代码 :
Form1.IdTCPClient1.WriteInteger(MyFirstBmp.Size);
Form1.IdTCPClient1.WriteBuffer(MyFirstBmp.Memory^,MyFirstBmp.Size,true);
服务端接受图片代码:
var
MyFirstBmp:TMemoryStream;
BufferLen :Integer;
MyBuffer: array[0..1000000] of Byte;
begin
BufferLen:= AThread.Connection.ReadInteger();
AThread.Connection.ReadBuffer(MyBuffer,BufferLen);
MyFirstBmp:=TMemoryStream.Create
MyFirstBmp.Clear;
MyFirstBmp.Write(MyBuffer,BufferLen);//
MyFirstBmp.Position := 0;
TempBmp:=TBitmap.Create;
TempBmp.LoadFromStream(MyFirstBmp);
Image1.Width := TempBmp.Width;
Image1.Height := TempBmp.Height;
Image1.Canvas.Draw(0,0,TempBmp);
MyFirstBmp.free;
end;
客服端发送图片代码 :
Form1.IdTCPClient1.WriteInteger(MyFirstBmp.Size);
Form1.IdTCPClient1.WriteBuffer(MyFirstBmp.Memory^,MyFirstBmp.Size,true);
服务端接受图片代码:
var
MyFirstBmp:TMemoryStream;
BufferLen :Integer;
MyBuffer: array[0..1000000] of Byte;
begin
BufferLen:= AThread.Connection.ReadInteger();
AThread.Connection.ReadBuffer(MyBuffer,BufferLen);
MyFirstBmp:=TMemoryStream.Create
MyFirstBmp.Clear;
MyFirstBmp.Write(MyBuffer,BufferLen);//
MyFirstBmp.Position := 0;
TempBmp:=TBitmap.Create;
TempBmp.LoadFromStream(MyFirstBmp);
Image1.Width := TempBmp.Width;
Image1.Height := TempBmp.Height;
Image1.Canvas.Draw(0,0,TempBmp);
MyFirstBmp.free;
end;
这意味着传输的图片大小不能超过1000001个字节, 约977KB。超过的话,服务器端将出现异常。
MyFirstBmp:TMemoryStream;
BufferLen :Integer;
MyBuffer: array of Byte;
begin
BufferLen:= AThread.Connection.ReadInteger();
SetLength(MyBuffer, BufferLen);
AThread.Connection.ReadBuffer(MyBuffer[0], BufferLen);
MyFirstBmp:=TMemoryStream.Create;
try
MyFirstBmp.Clear;
MyFirstBmp.Write(MyBuffer[0], BufferLen);
MyFirstBmp.Position := 0;
TempBmp:=TBitmap.Create;
try
TempBmp.LoadFromStream(MyFirstBmp);
Image1.Width := TempBmp.Width;
Image1.Height := TempBmp.Height;
Image1.Canvas.Draw(0, 0, TempBmp);
finally
TempBMP.Free;
end;
finally
MyFirstBmp.Free;
end;
MyBuffer := nil;
end;
var
MyFirstBmp: TMemoryStream;
BufferLen : Integer;
begin
BufferLen := AThread.Connection.ReadInteger();
MyFirstBmp := TMemoryStream.Create;
try
MyFirstBmp.Position := 0;
AThread.Connection.ReadStream(MyFirstBmp, BufferLen);
TempBmp := TBitmap.Create;
try
MyFirstBmp.Position := 0; //需要补上这一句
TempBmp.LoadFromStream(MyFirstBmp);
Image1.Width := TempBmp.Width;
Image1.Height := TempBmp.Height;
Image1.Canvas.Draw(0, 0, TempBmp);
finally
TempBMP.Free;
end;
finally
MyFirstBmp.Free;
end;
end;