- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
Вообще, для вывода любого изображения нам его нужно будет выгрузить, методом 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;
Код:
http.Get('http://www.site.com/link.jpeg', ms);
Код:
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, записал его в качестве ссылки и получил следующий результат:
Котейка получалась очешь широкоформатная :)
Благодаря тому, что использовался тип TMemoryStream все данные как загрузились, так и выгрузились очень быстро. Кстати, переменную потом желательно отчистить методом Clear.
На этот всё, спасибо за внимание!