この関数(Delphi 2010を使用してコンパイルおよびテスト)を使用して、HTTP経由でファイルをダウンロードし、TBitMapに保存できます。DelphiのTGraphic階層でサポートが登録されているすべてのファイルタイプを読み取り、BMP、GIF、JPG、およびPNGファイル形式を自動検出します。
USES Graphics, IdHTTP, PngImage, jpeg, GIFImg;
FUNCTION DownloadImage(CONST URL : STRING ; ImageType : TGraphicClass = NIL) : TBitMap;
VAR
HTTP : TIdHttp;
S : TStream;
IMG : TGraphic;
STR : AnsiString;
BEGIN
HTTP:=TIdHttp.Create(NIL);
TRY
S:=TMemoryStream.Create;
TRY
HTTP.Get(URL,S);
IF NOT Assigned(ImageType) THEN BEGIN
S.Position:=0;
SetLength(STR,5);
S.Read(STR[1],LENGTH(STR));
IF COPY(STR,1,2)='BM' THEN
ImageType:=TBitMap
ELSE IF COPY(STR,1,3)='GIF' THEN
ImageType:=TGIFImage
ELSE IF COPY(STR,2,3)='PNG' THEN
ImageType:=TPngImage
ELSE IF (ORD(STR[1])=$FF) AND (ORD(STR[2])=$D8) THEN
ImageType:=TJPEGImage
END;
IF NOT Assigned(ImageType) THEN RAISE EInvalidImage.Create('Unrecognized file format!');
IMG:=ImageType.Create;
TRY
S.Position:=0;
IMG.LoadFromStream(S);
Result:=TBitMap.Create;
TRY
Result.Assign(IMG)
EXCEPT
Result.Free;
RAISE
END
FINALLY
IMG.Free
END
FINALLY
S.Free
END
FINALLY
HTTP.Free
END
END;
ファイルタイプがすでにわかっている場合は、2番目のパラメータとしてTGifImage、TPngImage、TJPegImage、またはTBitMapのいずれかとして指定できます。そうでない場合、ルーチンはこれら4つのタイプの中でそれを自動検出しようとします。カスタムグラフィックタイプを使用する場合は、それを2番目のパラメーターとして指定するか、自動検出ロジックを更新して検出する必要があります。
したがって、ダウンロードした画像をディスクに保存せずにTImageに表示するために使用する場合は、次のように使用できます。
VAR
BMP : TBitMap;
BEGIN
BMP:=DownloadImage('http://domain.com/image.jpg');
TRY
Image1.Picture.Assign(BMP)
FINALLY
BMP.Free
END
END;