2012-04-17 44 views
8

我有一些图像文件存储到一个文件(某种档案)。这个文件看起来是这样的:JPEG数据流到TImage

enter image description here

那么,它分为两个部分 - 头和数据段。报头(绿色)中含有的各种信息,如专辑名称,位置,日期/时间,的描述中,在相册中的照片数等数据段(蓝色&橙色)具有结构简单,它含有Ñ X JPEG照片。我可以将该“imagedata”段提取到新的TMemoryStream对象,现在我想使用TImage来显示它。

我可以使用SaveAsFile内存流的方法,设置一些临时文件名,负荷的TImage该文件,后来,删除临时文件。这工作,但我想知道是否有任何方式发送流到TImage w/out使用温度。文件。

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

总之,我要的是让下面的过程作品(瓦特/出使用温度。文件)提前

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

感谢。

回答

18

我不知道如果这是你在找什么,但是这个代码应该从流的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; 
+1

+1略有差异变种的名称,但只是同我正在输入,我需要学习更快地打字。 – Dampsquid 2012-04-17 22:54:16

+2

我的上帝,即使我之前用过TJPEGImage,我完全错过了LoadFromStream的方法!非常感谢,就是这样。 – Wh1T3h4Ck5 2012-04-17 23:06:04

+0

很高兴帮助;-) – TLama 2012-04-17 23:06:35