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

그때 사용하려고 라이브러리 형태로 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 14387
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21064
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
106 파이어 몽키 이퀼라이저 데모 동영상 박병일 2012.02.06 10063
105 Delphi XE5 and RAD Studio XE5 Android and iOS Code Samples Humphery 2013.12.14 9340
104 파이어몽키 써드파티 라이브러리 ApeSuite file 박병일 2012.02.06 9114
103 파이어몽키를 이용해서 아이폰앱을 개발할때 스타일 바꾸기 관리자 2012.04.19 8970
102 Firemonkey MAC OSX 에서 ComboBox 다운현상 [2] c2design 2012.03.28 8338
101 VCL 폼을 파이어몽키 폼으로 바꿀수 있는 컨버터 프로그램 file 박병일 2012.03.01 8325
100 [참고] MAC OSX 어플리케이션 프로젝트 경로 문제 [1] c2design 2012.03.23 8137
99 [참고] MAC OSX 에서 ExtractFileName 사용시 주의점. [1] c2design 2012.03.23 7722
98 파이어몽키와 VCL을 한 화면에서 함께 사용할 수 있는 방법을 설명한 동영상 [2] 관리자 2012.05.09 7571
97 앤더슨 올슨이 아이폰용 컴포넌트의 새버전을 오픈 했습니다. [3] file 관리자 2012.05.09 7391
96 [세미나자료] 20120508 "Mac과 윈도우를 동시에… 동일한 소스코드로 멋지게 개발" file 관리자 2012.05.10 7320
95 [개발보고] 델파이 안드로이드 앱 출시 기술정보 [7] file c2design 2013.11.08 7097
94 사다리게임 소스와 함께 오픈(iOS, 구글 마켓 등록완료) [2] file c2design 2014.05.27 7002
93 모바일 Bluetooth 연동 자료 Humphery 2014.06.24 6999
92 파이어몽키용 TMS 그리드의 간략한 소개 백서 관리자 2012.09.26 6864
91 3줄의 코드로 "움직이는 3D 컬러애벌레" 만들기 관리자 2012.07.12 6861
90 안드로이드 - 장비 부팅 시 앱을 자동시작(링크) Humphery 2014.01.15 6626
89 파이어몽키에서 미디어 플레이어 개발 관련 Humphery 2013.12.18 6594
88 [안드로이드] 네트워크 연결 상태 체크 함수. [1] c2design 2013.10.29 6484
87 David I의 31일 동영상(한글자막) - TLang컴포넌트로 다국어 파이어몽키 앱 만들기(델파이 동일 적용) [1] 관리자 2013.05.06 6425