9

我有一些图像文件存储在一个文件(某种档案)中。该文件如下所示:

在此处输入图像描述

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

我可以使用TMemoryStream 的SaveAsFile方法,设置一些临时文件名,从 TImage 加载该文件,然后删除临时文件。那行得通,但我想知道有没有办法使用 temp 将该流发送到 TImage 中。文件。

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

简而言之,我想要的只是使以下程序有效(不使用临时文件)

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

提前致谢。

4

1 回答 1

22

我不确定这是否是您要查找的内容,但是此代码应将 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;
于 2012-04-17T22:51:25.260 回答