JPEG数据流到TImage

时间:2012-04-17 22:39:34

标签: delphi delphi-7 filestream timage

我有一些图像文件存储在一个文件中(某种存档)。那个文件看起来像这样:

enter image description here

嗯,它分为两个部分 - 标题和数据段。标题(绿色)包含各种信息,例如专辑名称,位置,日期/时间,描述,相册中的照片数量等。数据段(蓝色和橙色)结构简单,包含 N x JPEG照片。我可以将“imagedata”段提取到新的TMemoryStream对象中,现在我想用TImage显示它。

我可以使用TMemoryStream的 SaveAsFile 方法,设置一些临时文件名,从TImage加载该文件,然后删除临时文件。这是有效的,但我想知道是否有任何方法可以使用temp将该流发送到TImage中。文件。

当然,我可以编写代码来提取硬盘上的所有文件,但问题是我有很多这样的档案,只是想写应用程序来阅读那些“专辑”而不是有20,000多张照片我的硬盘。

简而言之,我想要的就是让以下程序工作(没有使用临时文件)

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

提前致谢。

1 个答案:

答案 0 :(得分:19)

我不确定您是否正在寻找,但此代码应将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;