首页 > 解决方案 > Delphi在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更改它时,我总是得到“?” 因此。

我如何使它工作?

标签: delphifiremonkeydelphi-10.3-rio

解决方案


哦,我不知道TImageControl有一个有争论的OnLoaded事件,那是完美的!const FileName: string不能更好!


推荐阅读