Zapis obrazka ze stream do pliku

0

Witam,

Potrzebuję za pomocą IdHHTP.Get pobierać obrazek i zapisywać go na dysku. Znalazłem taki kod (link na dole), który działa dobrze po za jednym. Mianowicie nie mam pojęcia jak zapisać Stream do pliku .gif. Ktoś mógłby podpowiedzieć jak mam to zapisać do pliku?

uses
  GIFImg;

procedure TForm1.btn1Click(Sender: TObject);
var
  MS : TMemoryStream;
  GIf: TGIFImage;
begin
  MS := TMemoryStream.Create;
  GIf := TGIFImage.Create;
  try
    IdHTTP1.get('http://www.google.com/intl/en_ALL/images/logo.gif',MS);
    Ms.Seek(0,soFromBeginning);       
    Gif.LoadFromStream(MS);
    img1.Picture.Assign(GIF);

  finally
    FreeAndNil(GIF);
    FreeAndNil(MS);
  end;
end;
1

Otwierasz plik i używasz metody CopyFrom.
Albo nie tworzyć MS, tylko otworzyć plik i jego podać zamiast MS.
Albo nie tworzyć MS, nie podawać go jako ostatni parametr wtedy get zwróci stringa, z którym możesz robić co chcesz.

0

A tego stringa mogę żywce zapisać jako plik? Tak jak bym wklejał tekst do notatnika i zapisał jako .gif?

1

Owszem możesz, do tego musisz otworzyć plik, zapisać, zamknąć plik.
Jeżeli potrzebujesz tylko do pliku to ma sens pierwszy wariant.

1
procedure TForm1.Button1Click(Sender: TObject);
const
  URL = 'http://revolutiontribe.files.wordpress.com/2007/06/logo-google.gif';
var
  ms: TMemoryStream;
begin
  ms:= TMemoryStream.Create;
  try
  IdHTTP1.Get(URL, ms);
  ms.Position:= 0;
  ms.SaveToFile('e:\google.gif');
  finally
  ms.Free;
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1