如何将BLOB流中的任意图像加载到TImage中?

Jen*_*off 8 delphi timage stream detect delphi-2007

如果我理解正确,请TImage.LoadFromFile从文件扩展名确定图片类型.

有没有办法从TBlobStream原始图像中自动检测图像类型?

我目前的代码:

procedure LoadImageFromStream(AImage: TImage; ADataSet: TDataSet);
var
  Stream: TStream;
begin
  Stream := ADataSet.CreateBlobStream(Field, bmRead);
  try
    AImage.Picture.Graphic.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end
Run Code Online (Sandbox Code Playgroud)

Arn*_*hez 16

请参阅此SO答案,从标题中检索文件内容.

或者你可以使用我们的TSynPicture,它将使用Gdi +库处理所有类型的图片(bmp/gif/tiff/jpg/png),在一个单独的类中.因此TPicture,对于任何类型的图片,您都可以成为这个独特的类.代码开销少于Jpeg或PNG Delphi单元.

var Pic: TSynPicture;

Pic := TSynPicture.Create;
Pic.LoadFromStream(aStream); // will load bmp/gif/tiff/jpeg/png content
AImage.Picture.Graphic := Pic;
....
Run Code Online (Sandbox Code Playgroud)