Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы загрузки PNG из интернета в элемент TImage FireMonkey

Delphi , Графика и Игры , Изображения

В статье будет рассмотрен вопрос загрузки PNG-изображений из интернета в элемент TImage в приложениях на Delphi, использующих FireMonkey. Мы рассмотрим типичную проблему, с которой сталкиваются разработчики при работе с удаленными PNG-изображениями, и предложим решение, основанное на примере кода на Object Pascal.

При разработке приложений с использованием Delphi и FireMonkey для платформы Android может возникнуть необходимость загрузки изображений из интернета. Например, при генерации QR-кодов. Вопрос, который часто задают разработчики, заключается в том, как правильно загрузить удаленное PNG-изображение в элемент TImage.

Пример некорректного использования

Рассмотрим код, который пытается загрузить PNG-изображение, но сталкивается с ошибкой "Invalid stream format":

procedure TfrmMain.Button1Click(Sender: TObject);
var
  MS: TMemoryStream;
  Png: TImageMultiResBitmap;
begin
  MS := TMemoryStream.Create;
  Png := TImageMultiResBitmap.Create(nil); // Исправление: использование nil
  try
    IdHTTP1.Get('https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=chujisko', MS);
    MS.Seek(0, soFromBeginning);
    Png.LoadFromStream(MS);
    img1.MultiResBitmap.Assign(Png); // Исправление: использование img1.Bitmap
  finally
    FreeAndNil(Png);
    FreeAndNil(MS);
  end;
end;

Ошибка в данном примере заключается в том, что используется класс TImageMultiResBitmap, который не подходит для однократной загрузки PNG, так как он предназначен для работы с многорезультационными изображениями. Кроме того, при создании TImageMultiResBitmap был использован некорректный параметр владельца (owner), что привело к ошибке.

Корректное решение

Используя советы из сообщества, разработчик перешел к использованию TBitmap вместо TImageMultiResBitmap, что позволило успешно загрузить изображение в элемент TImage. Вот исправленный код:

procedure TfrmMain.Button1Click(Sender: TObject);
var
  qrDims: Integer;
  MS: TMemoryStream;
begin
  if Edit1.Text <> '' then
  begin
    qrDims := Screen.Width - 100;
    IdHTTP1.Get('http://chart.googleapis.com/chart?chs=' + IntToStr(qrDims) + 'x' + IntToStr(qrDims) + '&cht=qr&chl=' + Edit1.Text, MS);
    MS.Seek(0, soFromBeginning);
    img1.Bitmap.LoadFromStream(MS);
  end
  else
    ShowMessage('Пожалуйста, введите текст.');
end;

После загрузки изображения в Bitmap элемента TImage, строка Png := TImageMultiResBitmap.Create(nil); и соответствующая строка, которая пыталась присвоить MultiResBitmap, были удалены из кода, так как они больше не были нужны.

Заключение

При работе с загрузкой изображений в приложениях FireMonkey важно правильно выбирать компоненты и корректно обращаться с потоками данных. В данном случае, замена TImageMultiResBitmap на TBitmap и корректное использование потока TMemoryStream позволили успешно решить проблему. Следуя этим рекомендациям, разработчики смогут избежать распространенных ошибок при работе с удаленными PNG-изображениями.

Создано по материалам из источника по ссылке.

В статье рассматривается проблема и решение для загрузки PNG-изображений из интернета в элемент TImage в приложениях на Delphi с использованием FireMonkey, с акцентом на типичные ошибки и корректный подход к использованию потоков данных.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Изображения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:50:41/0.0020649433135986/0