Выгружаем JPEG-изображение в Image по ссылке



Вообще, для вывода любого изображения нам его нужно будет выгрузить, методом 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, записал его в качестве ссылки и получил следующий результат:



Котейка получалась очешь широкоформатная :)

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

На этот всё, спасибо за внимание!
Теги:
image, TMemoryStream, tjpegimage, Create, поток, данных, переменную, данные, методом, TMemotyStream, После, объект, работает, AutoSize, LoadFromStream, Graphic, изображения, быстро, Picture, памятью
Добавлено: 25 Февраля 2015 07:44:35 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...