Avatar of Rob Rietow
Rob Rietow

asked on 

Function returning a blank TStream

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
Delphi

Avatar of undefined
Last Comment
Rob Rietow
ASKER CERTIFIED SOLUTION
Avatar of SteveBay
SteveBay
Flag of United States of America image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of Rob Rietow
Rob Rietow

ASKER

Thanks.  I am new to Streams.  You explained it well.  And it works!
Delphi
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.

60K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo