У меня проблемы с выяснением, как загрузить изображение с URL-адреса в элемент управления TImage.
В общем, это то, что мне нужно сделать
TMemoryStream *str = new TMemoryStream;
http->Get("http://myurl.mydomain.com/myimage.jpg", str);
Кажется, проблема в том, что str не имеет выделенного для него пространства. И я получаю «Недопустимая ошибка дескриптора ввода-вывода».
Я не могу узнать размер изображения перед рукой.
Как мне это сделать, пожалуйста? Я попытался выделить 10 МБ пространства для TMemoryStream, создав фиктивный файл и загрузив этот файл в TMemoryStream, но это также выдает ошибку «Invalid IO Handler».
Использование C ++ Builder в RAD Studio XE7 для разработки приложений для iOS и Android.
большое спасибо
Айер
Проблема не в коде, который вы показали. TMemoryStream
растет динамически, как данные записываются в него, и TIdHTTP::Get()
будет записывать любые данные, которые сервер фактически отправляет. Синтаксис кода, который вы показали, в порядке.
Если вы получаете сообщение об ошибке «Значение IOHandler недопустимо» от Get()
это означает HTTPS URL запрашивается, но TIdSSLIOHandlerSocketBase
компонент (например, TIdSSLIOHandlerSocketOpenSSL
) не назначен TIdHTTP::IOHandler
свойство для обработки шифрования SSL / TLS. Ваш код запрашивает HTTP URL, поэтому сервер, скорее всего, отправляет ответ перенаправления, чтобы сказать TIdHTTP
запросить HTTPS вместо URL (проверьте TIdHTTP::OnRedirect
событие для проверки). Вам нужно назначить SSL IOHandler для обработки URL-адресов HTTPS.