Url 如何将png从web加载到TImage控件中?

Url 如何将png从web加载到TImage控件中?,url,png,c++builder,timage,c++builder-xe8,Url,Png,C++builder,Timage,C++builder Xe8,我有几个小的.PNG图片,我不想从网址加载到我的应用程序中的TImage图像中。这些图片是“动态”的,所以我不想使用TImageList等将它们“硬编码”到我的应用程序中 我看过几个例子,但没有一个能给我一个直接的方法 我知道我可以使用TWebBrowser来解决这个问题,但它似乎模糊了我的应用程序,并且与我设置的对齐方式也不一致 有什么好的建议吗 我的平台是Android,我在FireMonkey中使用Embarcadero C++Builder XE8/Appmethod 1.17,该类处理

我有几个小的.PNG图片,我不想从网址加载到我的应用程序中的
TImage
图像中。这些图片是“动态”的,所以我不想使用
TImageList
等将它们“硬编码”到我的应用程序中

我看过几个例子,但没有一个能给我一个直接的方法

我知道我可以使用TWebBrowser来解决这个问题,但它似乎模糊了我的应用程序,并且与我设置的对齐方式也不一致

有什么好的建议吗

我的平台是Android,我在FireMonkey中使用Embarcadero C++Builder XE8/Appmethod 1.17,该类处理多种图像格式,包括PNG。该组件具有一个。您只需使用Indy的
TIdHTTP
组件(或您选择的任何其他HTTP API/库)将PNG图像数据下载到
TMemoryStream
,然后您可以调用
TImage::Bitmap::LoadFromStream()
方法加载流数据进行显示,例如:

TMemoryStream *strm = new TMemoryStream;
IdHTTP1->Get(L"http://domain/image.png", strm);
strm->Position = 0;
Image1->Bitmap->LoadFromStream(strm);
class TDownloadThread : public TThread
{
protected:
    virtual void __fastcall Execute()
    {
        TIdHTTP *Http = new TIdHTTP(NULL);
        Http->Get(L"http://domain/image.png", Strm);
        Strm->Position = 0;
    }

public:
    TMemoryStream *Strm;

    __fastcall TDownloadThread()
        : TThread(true)
    {
        FreeOnTerminate = true;
        Strm = new TMemoryStream;
    }
};
由于从远程服务器下载可能需要时间,并且您不应该阻止UI线程,因此您应该使用工作线程来处理下载,例如:

TMemoryStream *strm = new TMemoryStream;
IdHTTP1->Get(L"http://domain/image.png", strm);
strm->Position = 0;
Image1->Bitmap->LoadFromStream(strm);
class TDownloadThread : public TThread
{
protected:
    virtual void __fastcall Execute()
    {
        TIdHTTP *Http = new TIdHTTP(NULL);
        Http->Get(L"http://domain/image.png", Strm);
        Strm->Position = 0;
    }

public:
    TMemoryStream *Strm;

    __fastcall TDownloadThread()
        : TThread(true)
    {
        FreeOnTerminate = true;
        Strm = new TMemoryStream;
    }
};

void\uu快速调用TMyForm::DownloadImage()
{
TDownloadThread*Thread=新的TDownloadThread();
Thread->OnTerminate=&下载threadfinished;
线程->开始();
}
void\uu fastcall TMyForm::DownloadThreadFinished(TObject*发送方)
{
TDownloadThread*Thread=static\u cast(发送方);
如果(!Thread->FatalException)
图像1->位图->LoadFromStream(线程->Strm);
}

谢谢你的回复,雷米!!我会测试这个!!顺便问一下,FMX线程安全吗?在我试图回答自己的问题时,我被牵制住了。。。无论如何,我会将它粘贴到这里:“它工作!”…当我使用“”时。但如果图片是来自谷歌静态地图的图像,我会遇到问题。响应应该是png,但似乎我得到了“致命错误”“。如果我将URL复制到我的webbrowser,则可以。我需要在IdHTTP客户端中设置一些参数吗?不管怎样,你解决了我一半的问题。。。我很感激!!“继续并停留在”RG“…我找到了解决“致命错误”问题的方法,(实际上是TIdHTTP::Request::UserAgent参数被设置为“Mozilla/3.0(compatible;Indy Library)”,不知何故被压缩了,但现在被拒绝了。在Indy库中搜索时,我发现:因此将此参数更改为”Mozilla/3.0(兼容;'Application name')”其中'Application name'是我的应用程序的名称,它似乎工作正常。