문제

I have some image-files stored into one file (some kind of archive). That file looks like this:

enter image description here

Well, it's separated into two segments - header and data-segment. Header (green) contains various info, such as album name, location, date/time, description, number of photos in the album, etc. Data segment (blue & orange) has simple structure and it contains N x JPEG photo. I can extract that "imagedata" segment into new TMemoryStream object and now I want to show it using TImage.

I can use SaveAsFile method of TMemoryStream, set some temporary file-name, load that file from TImage, and later, remove temporary file. That works, but I'm wondering is there any way to send that stream into TImage w/out using temp. files.

Of course, I can write code to extract all those files on hard disk but problem is that I have a lot of archives like this one and just want to write application to read those "albums" instead of having 20,000+ photos on my hard drive.

In short, all I want is to make following procedure works (w/out using temp. files)

procedure ShowImageFromStream(data: TStream; img: TImage);
begin
...
end;

Thanks in advance.

도움이 되었습니까?

해결책

I'm not sure if that's what you are looking for, but this code should load the JPEG file from stream into the given TImage component:

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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top