Delphi - 无需下载即可显示图像

时间:2012-06-16 23:31:57

标签: delphi image

  

可能重复:
  How to get images from URL in Delphi

我正在使用Delphi 2010,有一些功能我可以下载并以cximage或图像对象的形式显示JPG或PNG图片,但我试图不将图片下载到硬盘,我想知道的是可能吗?我通过谷歌搜索stackoverflow但无法找到,所有样本都是关于下载文件的。

例如,我在表单中添加了cximage1,并希望显示来自“http://www.someaddress.com/pictures/001.JPG”等网址的图片。

感谢所有帮助,对不好的英语抱歉:)

1 个答案:

答案 0 :(得分:2)

您可以使用此功能(使用Delphi 2010编译和测试)通过HTTP下载文件并将其存储在TBitMap中。它将读取所有在Delphi的TGraphic hiearachy中具有注册支持的文件类型,并将自动检测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;

如果您已经知道文件类型,则可以将其指定为第二个参数,如TGifImage,TPngImage,TJPegImage或TBitMap。如果没有,例程将尝试在这四种类型中自动检测它。如果使用自定义图形类型,则需要将其指定为第二个参数或更新自动检测逻辑以检测它。

因此,如果您想使用它在TImage中显示下载的图像而不将其保存到光盘,则可以使用它:

  VAR
    BMP : TBitMap;

  BEGIN
    BMP:=DownloadImage('http://domain.com/image.jpg');
    TRY
      Image1.Picture.Assign(BMP)
    FINALLY
      BMP.Free
    END
  END;
相关问题