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

그때 사용하려고 라이브러리 형태로 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 14390
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21065
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
1363 Delphi XE2에서 맥 애플리케이션을 만들어 보자 박병일 2012.01.18 12993
1362 델파이 XE2 DataSnap Client 만들기 [1] 관리자 2011.12.22 12884
1361 [델파이 업그레이드 마이그레이션 무상 컨설팅] 체크리스트와 가이드(첨부 파일) [1] file 관리자 2012.02.08 12868
1360 "모바일 앱" 개발 또는 유지관리, 데브기어와 해결하세요! file 관리자 2015.03.26 12726
1359 [델파이 문법] 클래스와 객체 #8 file 관리자 2012.05.07 12568
» 웹상의 이미지를 폼(TImage)에서 사용하는 방법 [3] file Humphery 2013.12.14 11761
1357 RAD Studio(델파이, C++빌더) 버전별 공식 지원 플랫폼과 OS 버전 험프리 2014.03.05 11642
1356 델파이 XE2 파이어몽키로 만든 아이폰 3D 매쉬 앱 file 박병일 2012.03.07 11628
1355 ComboBox에서 Focus 가 올때 자동으로 펼쳐 내리기 박병일 2011.12.22 11427
1354 파이어 몽키를 이용한 공학 계산과 그래프 박병일 2012.01.28 11425
1353 DBGrid 에서 Cell 모양의 색깔 바꾸기 박병일 2011.12.22 11248
1352 파이어 몽키란 무었인가? 박병일 2012.01.19 11161
1351 델파이로 만든 구글 지오코딩 쎔플 입니다. 박병일 2012.02.06 11016
1350 [동영상강의] 델파이 기본 교육_1.프로젝트 시작하기 관리자 2012.04.25 10929
1349 [REST] REST 클라이언트로 REST 기반 웹서비스와 연동할 수 있습니다. [3] file 험프리 2014.01.29 10871
1348 [델파이 문법] 클래스와 객체 #1 file 관리자 2012.04.12 10863
1347 Alt -F4 로 종료 못하게 하기 박병일 2011.12.22 10827
1346 XE에서 MySQL 연결오류 및 한글문제 해결 [3] c2design 2013.08.28 10716
1345 파이어몽키를 이용하여 당구 게임을 시뮬레이션한 데모 file 박병일 2012.02.06 10648
1344 [환경설정] 아마존 EC2 이용해 리눅스 서버 환경 구축하기 file 험프리 2017.04.20 10628