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
事件,这太完美了!不能再好了!
我正在尝试检测 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
事件,这太完美了!不能再好了!