Вопрос: Возможно ли разместить TImage на FMX-форме для iOS и загрузить изображение (jpg) с URL в этот TImage для отображения в приложении iOS?
Я пытался сделать это безуспешно. Любые подсказки или направление будут оценены.
Подтвержденный ответ: Да, это возможно. Ниже приведен пример кода на Object Pascal (Delphi), который загружает изображение с URL в TImage на FMX-форме для iOS:
procedure TForm1.btnReadWebImgClick(Sender: TObject);
begin
ReadWebImage('http://www.gravatar.com/avatar/5af5f8c5f88c6c237745e9472a31410f?s=32&d=identicon&r=PG');
end;
procedure TForm1.ReadWebImage(imgAddress: string);
var
memStream: TMemoryStream;
begin
memStream := TMemoryStream.Create;
try
idhttp1.Get(imgAddress, memStream);
except
ShowMessage('Image not found at:' + imgAddress);
memStream.Free;
exit;
end;
try
memStream.Position := 0;
ImageControl1.Bitmap.LoadFromStream(memStream);
finally
memStream.Free;
end;
end;
Описание:
Создайте форму с TImage и TIdHttp на ней.
Добавьте процедуру btnReadWebImgClick, которая вызывает процедуру ReadWebImage с адресом URL изображения в качестве параметра.
Внутри ReadWebImage, создайте TMemoryStream и используйте TIdHttp для загрузки изображения из URL в поток.
Если загрузка прошла успешно, установите позицию потока на 0 и загрузите изображение в TImage с помощью LoadFromStream.
Примечание: Убедитесь, что вы добавили IdHTTP в свою форму и настроили его свойства, если это необходимо.
Альтернативный ответ (решение проблемы загрузки нескольких изображений):
Если вы пытаетесь загрузить несколько изображений и сталкиваетесь с задержкой или замораживанием, вам может помочь выполнение загрузки изображений в фоновом потоке. Ниже приведен пример кода, который загружает несколько изображений в фоновом потоке и отображает их в TImage:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
i: Integer;
Stream: TMemoryStream;
imgAddress: string;
Task: TTask;
begin
ProgressBar1.Min := 0;
ProgressBar1.Max := Table1.RecordCount;
Task := TTask.Create(nil, procedure
begin
for i := 1 to Table1.RecordCount do
begin
ProgressBar1.Value := i;
imgAddress := VirtualTable1.FieldByName('flyer').AsString;
Stream := TMemoryStream.Create;
idhttp1.Get(imgAddress, Stream);
try
Stream.Position := 0;
Table1.Edit;
TBlobField(Table1.FieldByName('image')).LoadFromStream(Stream);
Table1.Post;
finally
Stream.Free;
end;
Table1.Next;
end;
Table1.First;
end);
Task.Start;
end;
Описание:
Добавьте TTask в свою форму.
Внутри SpeedButton1Click, создайте задачу и определите процедуру, в которой вы хотите выполнить загрузку изображений в фоновом потоке.
Запустите задачу с помощью Task.Start.
Примечание: Убедитесь, что вы добавили IdHTTP и TTask в свою форму и настроили их свойства, если это необходимо.
Этот подход позволяет загружать изображения в фоновом потоке, что устраняет задержку и замораживание при загрузке нескольких изображений.
Пользователь спрашивает, возможно ли разместить TImage на FMX-форме для iOS и загрузить изображение (jpg) с URL в этот TImage для отображения в приложении iOS. Также рассматривается проблема загрузки нескольких изображений в фоновом потоке для у
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.