I have a Procedure which calls a Function which should return a TStream and does not. The code is below. There are 2 images attached The first shows the Stream in the called Function and the second shows the value returned in the calling procedure. Any ideas? Thanks.
procedure TfrmUTest2.btnComvertJPGtoBMPClick(Sender: TObject);
var
ms: TStream;
blobfield: TBlobfield;
SS: TStringSTream;
const
// HTTP Link
cHTTPLink = 'https://cdn2.lamag.com/wp-content/uploads/sites/6/2019/11/Tuna-Illustration-1000x437.jpg';
begin
//ms := TMemoryStream.Create;
try
ms := SamsaraConvertJPGtoBMP(cHTTPLink);
ss := tStringStream.create('');
SS.CopyFrom(ms, 0); // This shows that the Stream has no information; ********************
finally
ms.free;
end;
end;
function TfrmUTest2.SamsaraConvertJPGtoBMP(vHTTPLink: String): TStream;
var
Graphic: TGraphic;
BM: TBitmap;
idHTTP1: TidHTTP;
ms: TStream;
ms2: TMemoryStream;
FirstBytes: AnsiString;
SS: TStringStream;
wString: string;
begin
Graphic := nil;
BM := TBitmap.Create;
idHTTP1 := TidHTTP.Create(nil);
ms := TMemoryStream.Create;
ms2 := TMemoryStream.Create;
SS := TStringStream.create('');
result := nil;
try
idHTTP1.Get(vHTTPLink,ms);
SS.CopyFrom(ms, 0); // No need to position at 0 nor provide size
SetLength(FirstBytes, 8);
ms.Read(FirstBytes[1], 8);
Graphic := TJPEGImage.Create;
if Assigned(Graphic) then
begin
try
ms.Seek(0, soFromBeginning);
Graphic.LoadFromStream(MS);
BM.Assign(Graphic);
bm.SaveToStream(ms2);
result := ms2;
SS.CopyFrom(result, 0); // this shows that MS2 has information ********************
except
end;
Graphic.Free;
end;
finally
BM.free;
idHTTP1.free;
ms.free;
ms2.free;
ss.free;
end; CallingProcedure.jpg CalledFunction.jpg
Thanks. I am new to Streams. You explained it well. And it works!
Delphi
Delphi is the most powerful Object Pascal IDE and component library for cross-platform Native App Development with flexible Cloud services and broad IoT connectivity. It provides powerful VCL controls for Windows 10 and enables FMX development for Windows, Mac and Mobile. Delphi is your choice for ultrafast Enterprise Strong Development™. Look for increased memory for large projects, extended multi-monitor support, improved Object Inspector and much more. Delphi is 5x faster for development and deployment across multiple desktop, mobile, cloud and database platforms including 32-bit and 64-bit Windows 10.
ASKER