Delphi 在 TImageControl 中检测图像类型

Delphi detecting image type in TImageControl

我正在尝试检测 FMX TImageControl 中加载的图像类型。我正在使用 Delphi 10.3 Rio。

我的代码如下:

function DetectImage(BM: TBitmap): string;
var
  MS: TMemoryStream;
  FirstBytes: AnsiString;
begin
  MS := TMemoryStream.Create;
  try
    BM.SaveToStream(MS);
    SetLength(FirstBytes, 8);
    MS.Read(FirstBytes[1], 8);
    if Copy(FirstBytes, 1, 2) = 'BM' then
    begin
      Result := 'bmp';
    end
    else if FirstBytes = #137'PNG'#13#10#26#10 then
    begin
      Result := 'png';
    end
    else if Copy(FirstBytes, 1, 3) = 'GIF' then
    begin
      Result := 'gif';
    end
    else if Copy(FirstBytes, 1, 2) = #$FF#$D8 then
    begin
      Result := 'jpg';
    end
    else
      Result := '?';

  finally
    MS.Free;
  end;
end;

procedure TfrmMain.imgTeamAChange(Sender: TObject);
begin
 ShowMessage(DetectImage(imgTeamA.Bitmap))  ;
end;

所以,当我点击 TImageControl 进行更改时,我总是得到“?”结果。

我如何让它工作?

哦,我不知道 TImageControl 有一个带有 const FileName: string 参数的 OnLoaded 事件,这太完美了!不能再好了!