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
”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.
-Mike Kapnisakis, Warner Bros
With your subscription - you'll gain access to our exclusive IT community of thousands of IT pros. You'll also be able to connect with highly specified Experts to get personalized solutions to your troubleshooting & research questions. It’s like crowd-sourced consulting.
We can't always guarantee that the perfect solution to your specific problem will be waiting for you. If you ask your own question - our Certified Experts will team up with you to help you get the answers you need.
Our certified Experts are CTOs, CISOs, and Technical Architects who answer questions, write articles, and produce videos on Experts Exchange. 99% of them have full time tech jobs - they volunteer their time to help other people in the technology industry learn and succeed.
We can't guarantee quick solutions - Experts Exchange isn't a help desk. We're a community of IT professionals committed to sharing knowledge. Our experts volunteer their time to help other people in the technology industry learn and succeed.
Our community of experts have been thoroughly vetted for their expertise and industry experience.