2016-03-21 18 views
1

私はいくつかの小さい.PNG画像をWebアドレスからロードして、アプリケーション内のTImageイメージにロードすることはできません。写真は「ダイナミック」なので、TImageListなどを使ってアプリに「ハードコード」したくないのです。WebからPNGをTImageコントロールに読み込むにはどうすればよいですか?

私はいくつかの例を見てきましたが、どれもこれを行う方法を教えてくれません。

私はこれを解決するためにTWebBrowserを使用できますが、私のアプリケーションをあいまいにしていると思われ、整列に合わせていません。

良い提案はありますか?

私のプラットフォームは、Androidのです私はFMX.Graphics.TBitmapクラスは、PNGを含む複数の画像フォーマットを扱う、FireMonkeyのではエンバカデロC++ BuilderのXE8/Appmethod 1.17

答えて

2

を使用しています。 FMX.Objects.TImageコンポーネントはBitmap propertyです。 PNG画像データをTMemoryStreamにダウンロードするには、IndyのTIdHTTPコンポーネント(またはその他の任意のHTTP API /選択したライブラリ)を使用して、TImage::Bitmap::LoadFromStream()メソッドを呼び出すと表示用のストリームデータを読み込むことができます:

TMemoryStream *strm = new TMemoryStream; 
IdHTTP1->Get(L"http://domain/image.png", strm); 
strm->Position = 0; 
Image1->Bitmap->LoadFromStream(strm); 

時間がかかることがあり、リモートサーバからダウンロードし、あなたはUIスレッドをブロックすることはありませんので、あなたは、例えば、ダウンロードを処理するためにワーカースレッドを使用する必要があります。

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 __fastcall TMyForm::DownloadImage() 
{ 
    TDownloadThread *Thread = new TDownloadThread(); 
    Thread->OnTerminate = &DownloadThreadFinished; 
    Thread->Start(); 
} 

void __fastcall TMyForm::DownloadThreadFinished(TObject *Sender) 
{ 
    TDownloadThread *Thread = static_cast<TDownloadThread*>(Sender); 
    if (!Thread->FatalException) 
     Image1->Bitmap->LoadFromStream(Thread->Strm); 
} 
+0

返信いただきありがとうございます。私はこれをテストします!! ところで、FMXスレッドは安全ですか? –

+0

RTL/VCLほどスレッドセーフです。 –

+0

私自身の質問に返答しようとしたところで、私は固定されていました...とにかく私はここにそれを貼り付けます: "これは動作します...私が使用すると、" http://www.domain.com/image.pngしかし、画像がGoogleの静的マップからの画像であれば、問題は発生します。応答はPNGでなければなりませんが、 "致命的なエラー"が表示されているようです。 。私はIdHTTPクライアントにいくつかのパラメータを設定する必要がありますか? とにかく、あなたは私の問題の半分を解決し...私は は「上のキープ&上の滞在」 RG」 –

関連する問題