如何将FMX.TImage赋值给VCL.TBitmap?
How to assign s a FMX.TImage to a VCL.TBitmap?
我尝试这样做:
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'.
您不能将 FMX TBitmap
分配给 VCL TBitmap
。它们彼此不兼容(一开始你甚至不应该在同一个项目中混合使用 VCL 和 FMX,它们不是为一起使用而设计的)。
您必须将 FMX TBitmap
保存到 BMP-formatted stream/file,然后将其加载到 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;
我尝试这样做:
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'.
您不能将 FMX TBitmap
分配给 VCL TBitmap
。它们彼此不兼容(一开始你甚至不应该在同一个项目中混合使用 VCL 和 FMX,它们不是为一起使用而设计的)。
您必须将 FMX TBitmap
保存到 BMP-formatted stream/file,然后将其加载到 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;