我有一些图像文件存储在一个文件中(某种存档)。那个文件看起来像这样:
嗯,它分为两个部分 - 标题和数据段。标题(绿色)包含各种信息,例如专辑名称,位置,日期/时间,描述,相册中的照片数量等。数据段(蓝色和橙色)结构简单,包含 N x JPEG照片。我可以将“imagedata”段提取到新的TMemoryStream对象中,现在我想用TImage显示它。
我可以使用TMemoryStream的 SaveAsFile 方法,设置一些临时文件名,从TImage加载该文件,然后删除临时文件。这是有效的,但我想知道是否有任何方法可以使用temp将该流发送到TImage中。文件。
当然,我可以编写代码来提取硬盘上的所有文件,但问题是我有很多这样的档案,只是想写应用程序来阅读那些“专辑”而不是有20,000多张照片我的硬盘。
简而言之,我想要的就是让以下程序工作(没有使用临时文件)
procedure ShowImageFromStream(data: TStream; img: TImage);
begin
...
end;
提前致谢。
答案 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;