Поток данных JPEG в TImage
У меня есть несколько файлов изображений, хранящихся в одном файле (какой-то архив). Этот файл выглядит так:
Ну, это разделено на два сегмента - заголовок и сегмент данных. Заголовок (зеленый) содержит различную информацию, такую как название альбома, местоположение, дата / время, описание, количество фотографий в альбоме и т. Д. Сегмент данных (синий и оранжевый) имеет простую структуру и содержит N x JPEG-фотографию. Я могу извлечь этот сегмент "imagedata" в новый объект TMemoryStream, и теперь я хочу показать его с помощью TImage.
Я могу использовать метод SaveAsFile в TMemoryStream, установить временное имя файла, загрузить этот файл из TImage, а затем удалить временный файл. Это работает, но мне интересно, есть ли способ отправить этот поток в TImage без использования temp. файлы.
Конечно, я могу написать код для извлечения всех этих файлов на жесткий диск, но проблема в том, что у меня есть много архивов, подобных этому, и я просто хочу написать приложение для чтения этих "альбомов" вместо того, чтобы иметь более 20000 фотографий на моем жестком диске.,
Короче говоря, все, что я хочу, - это заставить следующую процедуру работать (без временных файлов)
procedure ShowImageFromStream(data: TStream; img: TImage);
begin
...
end;
Заранее спасибо.
1 ответ
Я не уверен, что это то, что вы ищете, но этот код должен загрузить файл JPEG из потока в данный компонент TImage:
uses
JPEG;
procedure ShowImageFromStream(AImage: TImage; AData: TStream);
var
JPEGImage: TJPEGImage;
begin
AData.Position := 0;
JPEGImage := TJPEGImage.Create;
try
JPEGImage.LoadFromStream(AData);
AImage.Picture.Assign(JPEGImage);
finally
JPEGImage.Free;
end;
end;