Delphi 在FMX中连接多个图像?
在VCL中,我是如何从两个图像中生成一个图像,同时在它们之间创建空间的: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
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绘制到VCLTCanvas
上
不过,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忘了设置矩形。