在FMX中加入多个图像?

时间:2019-05-16 12:37:14

标签: delphi firemonkey delphi-10.3-rio

在VCL中,这是我如何从两个图像中创建单个图像,同时在它们之间创建空间:

 procedure TForm2.Button1Click(Sender: TObject);
var
p1,p2:string;
b1,b2:TBitmap;
bitmap: TBitmap;
begin
 p1:='C:\Users\John\Desktop\p1.bmp';
 p2:='C:\Users\John\Desktop\p2.bmp';
 b1:=TBitmap.Create;
 b1.LoadFromFile(p1);
 b2:=TBitmap.Create;
 b2.LoadFromFile(p2);
  sBit:= TBitmap.Create;
  try
   sBit.Height:=b1.Height;
   sBit.Width:=b1.Width+5+b2.Width;
   sBit.Canvas.Draw(0,0,b1); //Drawing First Bitamp here
   sBit.Canvas.Draw(b1.Width + 5,0,b2);// Drawing Second one 
   Image1.Picture.Bitmap.Assign(sBit);
  finally
   sBit.FreeImage;
  end;
end; 

现在如何在FMX中绘制相同的图片?

编辑

使用Bitmap.CopyFromBitmap可以正常工作!

 procedure process;
 var
  p1,p2: String;
  b1,b2,b3:TBitmaps;
  rect: TRect;
  begin
  //load both bitmaps to b1 and b2.
  rect.Left:=0;
  rect.Top:=0;
  rect.Width:=b1.Width;
  rect.Height:=b1.Height; 
  b3:= TBitmaps.Create;
  b3.Height:= b1.height;
  b3.widht:=b1.width;
  b3.CopyFromBitmap(b1,rect,0,0);
  b3.CopyFromBitmap(b2,rect,b1r.Width+5,0);
  Image1.Bitmap.Assign(b3);
end; 

1 个答案:

答案 0 :(得分:2)

在VCL中,您不能将PNG图像加载到TBitmap中,而只能加载BMP图像。对于TPngImageb1,您将不得不使用b2。可以TPngImage Draw()到VCL TCanvas上。

FMX的TBitmap支持PNG。

在FMX中,在这种情况下,等效于Canvas.Draw()的是使用TBitmap.CopyFromBitmap()

  

将矩形区域从指定的位图复制到当前位图。

然后使用Image1.Bitmap.Assign(sBit);将最终的TBitmap分配给TImage(FMX中没有TPicture)。