웹상의 이미지를 화면에 표시해야 할경우가 있습니다.

그때 사용하려고 라이브러리 형태로 Unit을 만들어 공개합니다.


구현 내용은 

IdHttp로 웹상의 데이터를 Stream으로 받고, TImage.Bitmap을 Stream에서 읽는 방식입니다.


TBitmap을 class helper로 확장해서 구현했으니, class helper가 어떤때 쓰이는지도 참고하시면 좋을 것 같습니다.


iOS(아이폰5), Android(Nexus 7), 윈도우(Windows 7)에서 모두 정상 동작 확인했습니다.


3가지 메소드는 (1) 웹상의 이미지를 그대로 가져오기, (2) 웹상의 이미지와 함께 원본 크기 가져오기, (3) 웹상의 이미지를 Thumbnail형태로 가져오기 입니다.


샘플소스

BitmapUrl.zip 


사용방법

procedure TForm3.Button1Click(Sender: TObject);

var

  Size: Int64;

begin

  Image1.Bitmap.LoadFromUrl('http://cfile2.uf.tistory.com/image/2353573E529FDAAC032731', Size);


  Memo1.Lines.Add('1 : ' + Format('W: %d, H: %d, S: %d', [Image1.Bitmap.Width, Image1.Bitmap.Height, Size]))

end;


procedure TForm3.Button2Click(Sender: TObject);

begin

  Image1.Bitmap.LoadFromUrl('http://cfile2.uf.tistory.com/image/2353573E529FDAAC032731');


  Memo1.Lines.Add('2 : ' + Format('W: %d, H: %d', [Image1.Bitmap.Width, Image1.Bitmap.Height]))

end;


procedure TForm3.Button3Click(Sender: TObject);

begin

  Image1.Bitmap.LoadThumbnailFromURL('http://cfile2.uf.tistory.com/image/2353573E529FDAAC032731', 100, 100);


  Memo1.Lines.Add('3 : ' + Format('W: %d, H: %d', [Image1.Bitmap.Width, Image1.Bitmap.Height]))

end;


구현소스

unit FMX.Devgear.Extentions;


interface


uses

  System.Classes, System.Types, FMX.Graphics;


type

  TBitmapHelper = class helper for TBitmap

  private

    function LoadStreamFromUrl(AUrl: string): TMemoryStream;

  public

    procedure LoadFromUrl(AUrl: string; var outSize: Int64); overload;

    procedure LoadFromUrl(AUrl: string); overload;


    procedure LoadThumbnailFromUrl(AUrl: string; const AFitWidth, AFitHeight: Integer);

  end;


implementation


uses

  IdHttp, IdTCPClient;


function TBitmapHelper.LoadStreamFromUrl(AUrl: string): TMemoryStream;

var

  Http: TIdHttp;

begin

  Result := TMemoryStream.Create;

  Http := TIdHttp.Create(nil);

  try

    try

      Http.Get(AUrl, Result);

    except

    end;

  finally

    Http.Free;

  end;

end;


procedure TBitmapHelper.LoadFromUrl(AUrl: string; var outSize: Int64);

var

  Stream: TMemoryStream;

begin

  Stream := LoadStreamFromUrl(AUrl);

  outSize := Stream.Size;

  try

    if Stream.Size > 0 then

    begin

      LoadFromStream(Stream);

    end

  finally

    Stream.Free;

  end;

end;


procedure TBitmapHelper.LoadFromUrl(AUrl: string);

var

  tmp: Int64;

begin

  LoadFromUrl(AUrl, tmp);

end;


procedure TBitmapHelper.LoadThumbnailFromUrl(AUrl: string; const AFitWidth,

  AFitHeight: Integer);

var

  Bitmap: TBitmap;

  scale: Single;

begin

  LoadFromUrl(AUrl);

  scale := RectF(0, 0, Width, Height).Fit(RectF(0, 0, AFitWidth, AFitHeight));

  Bitmap := CreateThumbnail(Round(Width / scale), Round(Height / scale));

  try

    Assign(Bitmap);

  finally

    Bitmap.Free;

  end;

end;

end.



사진 2013. 12. 13. 오전 12 24 12.jpg 


Screenshot_2013-12-13-00-28-21.jpg


Windows 7 x64 2013-12-13 00-22-10.jpg

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 22420
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 20943
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 23014
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 28794
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 29999
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 25348
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 46295
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 182123
303 안드로이드 앱 서명 및 배포 file Humphery 2014.01.02 10392
302 파이어몽키 모바일에서 사용자 파일 배포 및 사용 file 험프리 2013.12.27 6304
301 FM(파이어몽키) 애플리케이션에서 StyledSettings 활용하기 관리자 2013.12.27 2704
300 Hotfix 3: RAD Studio XE5, Delphi XE5 업데이트2 다운로드 관리자 2013.12.27 3722
299 [XE5만의 특별한 기능] 응답하라! Delphi VCL 개발자 관리자 2013.12.21 4921
298 Runtime Packages 옵션으로 프로그램(배포) 용량 줄이기 [4] file Humphery 2013.12.19 7883
297 파이어몽키에서 미디어 플레이어 개발 관련 Humphery 2013.12.18 6674
296 안드로이드 API를 파이어몽키에서 사용하기(Toast 메세지 구현) file Humphery 2013.12.17 6288
295 XE5용 업데이트2 가 공개되었습니다. 관리자 2013.12.16 3357
» 웹상의 이미지를 폼(TImage)에서 사용하는 방법 [3] file Humphery 2013.12.14 11912
293 Delphi XE5 and RAD Studio XE5 Android and iOS Code Samples Humphery 2013.12.14 9394
292 iOS 에서 C++ 지원 XE5 Update 2 가 공개되었습니다. minders 2013.12.13 3913
291 Hotfix 2 공개: RAD Studio XE5, Delphi XE5, C++Builder XE5 관리자 2013.12.05 3693
290 ComPort(시리얼 통신) 컴포넌트 설치안내 [11] file 험프리 2013.12.04 112476
289 11월 26일 "RAD Studio XE5 따라잡기: 모바일 개발 퀵스타트 LIVE!" 발표자료입니다. file 관리자 2013.12.03 3621
288 엔터프라이즈 데이터 기반의 모바일 앱 과정(2일) 우선 등록 안내 관리자 2013.11.21 2737
287 RAD Studio XE5 와 C++Builder XE5, All-Access XE 사용 고객을 위한 Hotfix 1 이 공개되었습니다. 관리자 2013.11.08 3757
286 [개발보고] 델파이 안드로이드 앱 출시 기술정보 [7] file c2design 2013.11.08 7145
285 델파이 안드로이드앱에서 jar 클래스 사용하기 file 관리자 2013.10.31 5387
284 Help Update 1 : RAD Studio XE5, Delphi XE5, C++Builder XE5 관리자 2013.10.31 3512