代码之家  ›  专栏  ›  技术社区  ›  IceCold

如何分配FMX。t标记为VCL。TBitmap?

  •  2
  • IceCold  · 技术社区  · 8 年前

    我尝试这样做:

    BMP.Assign(Image1.Bitmap);
    

    Image1是一个FMX对象。
    BMP是一种标准(VCL图形)位图。

    我得到的错误是:

    Project Project1.exe raised exception class EConvertError with message
    'Cannot assign a TBitmapOfItem to a TBitmap'.
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Remy Lebeau    8 年前

    您不能分配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;