...
implementation
type
TImgClass = class
private
Fimg: TImage;
Fpos: TPoint;
public
constructor Create(aImg: TImage; const X,Y: Integer);
destructor Destroy;
property Image: TImage read Fimg write Fimg;
property Posic: TPoint read FPos write FPos;
end;
constructor TImgClass.Create(aImg: TImage; const X,Y: Integer);
begin
inherited Create;
Fimg:= TImage.Create(nil);
Fimg.Picture.Assign(aImg.Picture);
FPos:= Point(X,Y);
end;
destructor TImgClass.Destroy;
begin
Fimg.Free;
inherited Destroy;
end;
type
TVecImgClass = array of TImgClass;
procedure CollageImage(vImg: TVecImgClass; Target: TImage);
var
bmp: TBitmap;
grp: TGraphic;
i : Integer;
begin
bmp:= TBitmap.Create;
try
bmp.Height:= 0;
bmp.Width := 0;
for i:= Low(vImg) to High(vImg) do
begin
grp:= vImg[i].Image.Picture.Graphic;
if vImg[i].Posic.Y+grp.Width > bmp.Width then
bmp.Width:= vImg[i].Posic.Y+grp.Width + bmp.Width;
if vImg[i].Posic.X+grp.Height > bmp.Height then
bmp.Height:= vImg[i].Posic.X + grp.Height;
bmp.Canvas.Draw(vImg[i].Posic.X, vImg[i].Posic.Y, grp);
Target.Picture.Bitmap.Assign(bmp);
end;
finally
bmp.Free;
end;
end;
procedure TForm1.btnCollageClick(Sender: TObject);
var
vImg: TVecImgClass;
i: Integer;
begin
SetLength(vImg, 4);
vImg[0]:= TImgClass.Create(Image1, 0, 0);
vImg[1]:= TImgClass.Create(Image2, 5, 135);
vImg[2]:= TImgClass.Create(Image3, 150, 0);
vImg[3]:= TImgClass.Create(Image4, 200, 150);
CollageImage(vImg, Image5);
for i:= 3 downto 0 do vImg[i].Destroy;
Image5.Stretch:= True;
Finalize(vImg);
end;