0

重複の可能性:
Delphi で URL から画像を取得する方法

私は Delphi 2010 を使用しています。いくつかの機能を使用して、JPG または PNG 画像を cximage または画像オブジェクトにダウンロードして表示できますが、画像をハード ドライブにダウンロードせずに実行しようとしています。Google と stackoverflow で検索しましたが見つかりませんでした。すべてのサンプルはファイルのダウンロードに関するものです。

たとえば、フォームに cximage1 を追加し、「http://www.someaddress.com/pictures/001.JPG」のような URL から画像を表示したいとします。

すべての助けに感謝します。下手な英語で申し訳ありません:)

4

1 に答える 1

3

この関数(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;
于 2012-06-17T05:19:40.263 に答える