0

URL から TImage コントロールに画像をロードする方法がわかりません。

大まかに言えば、これは私がする必要があることです

   TMemoryStream *str = new TMemoryStream;
   http->Get("http://myurl.mydomain.com/myimage.jpg", str);

問題は、 str にスペースが割り当てられていないようです。そして、「無効な IO ハンドル エラー」が発生します。

事前に画像のサイズを知ることはできません。

どうすればいいですか?ダミー ファイルを作成し、そのファイルを TMemoryStream にロードして、TMemoryStream に 10MB の領域を割り当てようとしましたが、「無効な IO ハンドラ」エラーもスローされます。

RAD Studio XE7 で C++ Builder を使用して、iOS および Android アプリを開発します。

どうもありがとう

イヤル

4

1 に答える 1

0

問題は、あなたが示したコードではありません。 TMemoryStreamデータが書き込まれると動的に大きくなりTIdHTTP::Get()、サーバーが実際に送信するデータは何でも書き込みます。あなたが示したコード構文は問題ありません。

から「IOHandler 値が無効です」というエラーが表示されるGet()場合は、HTTPS URL が要求されているが、SSL/TLS 暗号化を処理するために から派生したTIdSSLIOHandlerSocketBaseコンポーネント ( などTIdSSLIOHandlerSocketOpenSSL) がプロパティに割り当てられていないことを意味します。TIdHTTP::IOHandlerコードがHTTP URL を要求しているため、サーバーはリダイレクト応答を送信して、代わりにHTTPS URLTIdHTTPを要求するように指示している可能性があります (イベントを確認して確認してください)。HTTPS URL を処理するには、SSL IOHandler を割り当てる必要があります。TIdHTTP::OnRedirect

于 2016-03-21T19:14:58.563 に答える