JPEG data-stream to TImage

。_饼干妹妹 提交于 2019-11-30 03:15:16

问题


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

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.


回答1:


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;


来源:https://stackoverflow.com/questions/10200252/jpeg-data-stream-to-timage

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!