• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Выгружаем Jpeg-изображение В Image По Ссылке

Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,562
Баллы
155
6k591a7khrsy7hr.png
Вообще, для вывода любого изображения нам его нужно будет выгрузить, методом post-запроса, в поток данных. Что такое поток данных в delphi? Это классы, которые умеют работать с данными, выгружаемыми во временную память (буфер). Под работой подразумевается прежде всего чтение/запись данных из внешнего источника. Исходящие от предка TStream (который, надо сказать, появился ещё в 90-ых в Pascal'е) потоки заточены под определённые типы данных. Например TMemotyStream - работает с памятью, TStringStream - с типом String и т.д. Изображения мы будем выгружать в тип TMemotyStream, который, как сказано выше, удобно и быстро работает с памятью.

Первым делом рассмотрим, как работать с изображениями, формат которых JPEG. Для этого в uses (модули нашего проекта) подключаем библиотеку JPEG. После чего в разделе объявления переменных объявляем объект типа tjpegimage и объект типа TMemoryStream:
Код:
var
image: tjpegimage;
ms: TMemoryStream;
Затем, как обычно, все объекты нужно проинициализировать, другими словами подготовить к работе. Присвоим каждому объекту создание, как экземпляру определённого класса:
Код:
image:= tjpegimage.Create;
ms:= TMemoryStream.Create;
После чего методом POST принимаем в поток TMemoryStream данные изображения, которые будут получены по ссылке:
Код:
http.Get('http://www.site.com/link.jpeg', ms);
Осталось лишь выгрузить данные в компонент Image:
Код:
ms.Position := 0; //позиция указателя на 0-ле
image.AutoSize:= true; //Включаем авто-размер компонента Image
image.LoadFromStream(ms); //Выгружаем поток в переменную типа tjpegimage
image.Picture.Graphic := image; //А затем выгружаем эту переменную в компонент image
Весь код выглядит так:
Код:
var
 
image: tjpegimage;
ms: TMemoryStream;
 
begin
image:= tjpegimage.Create;
ms:= TMemoryStream.Create;
http.Get('http://www.site.com/link.jpeg', ms);
ms.Position := 0;
image.AutoSize:= true;
image.LoadFromStream(ms);
image.Picture.Graphic := image;
end;
Согласитесь, ничего сложного :)

Проверим на практике вышеизложенный код. Я взял фото какого-то кота из google, записал его в качестве ссылки и получил следующий результат:
4nbiieirh12d06r.png
Котейка получалась очешь широкоформатная :)

Благодаря тому, что использовался тип TMemoryStream все данные как загрузились, так и выгрузились очень быстро. Кстати, переменную потом желательно отчистить методом Clear.

На этот всё, спасибо за внимание!
 
Вверх Снизу