如何将FMX.TImage分配给VCL.TBitmap?

时间:2018-02-24 21:30:53

标签: firemonkey delphi-10.2-tokyo

我尝试这样做:

BMP.Assign(Image1.Bitmap);

Image1是FMX对象 BMP是标准(VCL.Graphics)位图。

我得到的错误是:

Project Project1.exe raised exception class EConvertError with message
'Cannot assign a TBitmapOfItem to a TBitmap'.

1 个答案:

答案 0 :(得分:1)

您无法将FMX TBitmap分配给VCL TBitmap。它们彼此不兼容(你甚至不应该在同一个项目中混合使用VCL和FMX,它们不能一起使用)。

您必须将FMX TBitmap保存到BMP格式的流/文件中,然后将其加载到VCL TBitmap

直接使用文件:

Image1.Bitmap.SaveToFile('file.bmp');
BMP.LoadFromFile('file.bmp');

但是,在使用流时,FMX TBitmap.SaveToStream()仅以PNG格式保存,因此您必须使用TBitmapCodecManager.SaveToStream()以BMP格式保存,例如:

Strm := TMemoryStream.Create;
try
  Surface := TBitmapSurface.Create;
  try
    Surface.Assign(Image1.Bitmap);
    TBitmapCodecManager.SaveToStream(Strm, Surface, '.bmp');
  finally
    Surface.Free;
  end;
  Strm.Position := 0;
  BMP.LoadFromStream(Strm);
finally
  Strm.Free;
end;