상세 컨텐츠

본문 제목

Load image from URL with Delphi

프로그래밍/Delphi

by ryujt 2013. 3. 7. 14:36

본문

이미지의 URL 주소를 이용해서 다운로드하고 화면에 표시하는 함수입니다.  웹 브로우져를 보면 이미지를 비동기적으로 다운로드하게 되는데, 그러한 경우 쉽게 사용할 수 있도록 꾸며봤습니다.


소스는 아래 링크를 참고하시기 바랍니다.

https://code.google.com/p/ryulib4delphi/source/browse/trunk/XE2/LoadImageFromURL.pas


동기적으로 다운로드 받는 것은 아래와 같이 사용하시면 됩니다.  "Tick: 1156342"의 시간이 걸렸습니다.  https를 이용하는 경우에는 한참 걸리게 됩니다.  

procedure TfmMain.btLoadJPEGClick(Sender: TObject);
var
  Tick, OldTick : int64;
begin
  moMsg.Clear;

  QueryPerformanceCounter (OldTick);
  LoadImageFromUrlToBitmap(
    'https://t1.daumcdn.net/cfile/tistory/196F444B4DE068841D',
    Image.Picture.Bitmap
  );
  QueryPerformanceCounter (Tick);
  moMsg.Lines.Add(Format('Tick: %d', [Tick - OldTick]));
end;


비동기적으로 다운로드할 경우에는 아래와 같이 하시면 됩니다.  함수 이름만 바뀝니다.  그리고, 함수는 바로 리턴되지만, 이미지가 성공적으로 다운로드 되었을 때 화면에 표시됩니다.  "Tick: 3119"의 시간이 걸렸습니다.

procedure TfmMain.btAsyncClick(Sender: TObject);
var
  Tick, OldTick : int64;
begin
  moMsg.Clear;

  QueryPerformanceCounter (OldTick);
  AsyncLoadImageFromUrlToBitmap(
    'https://t1.daumcdn.net/cfile/tistory/196F444B4DE068841D',
    Image.Picture.Bitmap
  );
  QueryPerformanceCounter (Tick);
  moMsg.Lines.Add(Format('Tick: %d', [Tick - OldTick]));
end;


클래스를 사용하면 쉽게 구현할 수 있었지만, "이미지를 다운받는다"를 보다 직관적으로 사용할 수 있도록 내부에 익명 메소드를 사용해서 처리했습니다.  자세한 것은 소스를 참고하시기 바랍니다.

관련글 더보기