Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 在FMX中连接多个图像?_Delphi_Firemonkey_Delphi 10.3 Rio - Fatal编程技术网

Delphi 在FMX中连接多个图像?

Delphi 在FMX中连接多个图像?,delphi,firemonkey,delphi-10.3-rio,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.LoadFromF

在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; 

在VCL中,不能将PNG图像加载到
TBitmap
,只能加载BMP图像。您必须使用
TPngImage
来代替
b1
b2
TPngImage
可以
Draw()
'n绘制到VCL
TCanvas

不过,FMX的
TBitmap
支持PNG

在FMX中,在这种情况下,
Canvas.Draw()
的等价物是使用:

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


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

我尝试了CopyFromBitmap,但这没有加载任何内容到TImage,请查看我更新的问题。@John在调用
CopyFromBitmap()
之前,您没有设置目标
TBitmap
的尺寸,就像你在画图之前在VCL中做的那样。此外,您还为
b2
声明了一个单独的
TRect
,但实际上并没有使用它。VCL代码允许两个位图具有不同的宽度,但FMX代码不允许。此外,没有
TBitmap
,它应该是
TBitmap
。另外,您不应该使用
GetCurrentDir()
,进程的CWD是动态的,不能保证是您所期望的。耶,忘记设置RECT了。使用相同的(br1)rect,因为两个图像具有相同的尺寸。它是
TBitmap
因为IDE无法解析单元名称,所以将
FMX.Graphic.TBitmap
FMX.Graphic.Bitmap
添加到uses子句。先生,我没有收到您关于
GetCurrentDir
的最后一部分评论,对不起。@John没有
TBitmaps
类。如果IDE无法解析
TBitmap
,则需要修复项目。放入
uses
子句的正确单元名称是
FMX.Graphics
。它已经在那里了
FMX.Graphics
,但不知道为什么它不能解析
TBitmap
单元。由于@RemyLebeau解决了问题,您编辑的代码无法编译。更正后,它会编译并按上面所说的那样工作。@TomBrunberg Yeah忘了设置矩形。