troubleshooting Question

Function returning a blank TStream

Avatar of Rob Rietow
Rob Rietow asked on
Delphi
2 Comments1 Solution92 ViewsLast Modified:
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
Join the community to see this answer!
Join our exclusive community to see this answer & millions of others.
Unlock 1 Answer and 2 Comments.
Join the Community
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 2 Comments.
Try for 7 days

”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