PDA

Ver la Versión Completa : exportar 2 Timage en 1


FabianSiza
15-09-2014, 01:46:54
hola como estan quisiera saber como exportar 2 o mas Timage en 1 estoy usando este codigo para exportar

if SavePictureDialog1.execute then
image12.picture.SaveToFile(savepicturedialog1.FileName+extension);

como hago para que todos salgan en uno solo? gracias

ecfisa
15-09-2014, 08:24:29
Hola FabianSiza.
hola como estan quisiera saber como exportar 2 o mas Timage en 1...
como hago para que todos salgan en uno solo? gracias


procedure ComposeImage(vImg: array of TImage; Target: TImage);
var
bmp: TBitmap;
grp: TGraphic;
i,wdt: Integer;
begin
bmp:= TBitmap.Create;
try
bmp.Height:= 0;
bmp.Width := 0;
wdt:= 0;
for i:= Low(vImg) to High(vImg) do
begin
grp:= vImg[i].Picture.Graphic;
if grp.Height > bmp.Height then
bmp.Height:= grp.Height;
bmp.Width:= wdt + grp.Width;
bmp.Canvas.Draw(wdt, 0, grp);
Target.Picture.Bitmap.Assign(bmp);
Inc(wdt, grp.Width);
end;
finally
bmp.Free;
end;
end;


Ejemplo de uso:

procedure TForm1.btnComposeClick(Sender: TObject);
begin
ComposeImage([Image1, Image2, Image3, Image4], Image5); // [Image1,..., Image_N]
//A partir de aquí podes guardar la imágen resultante como gustes.
end;

Salida:

http://sia1.subirimagenes.net/img/2014/09/15/140915081742712385.jpg

Saludos :)

FabianSiza
15-09-2014, 20:52:18
Muchas gracias me a servido mucho, podrías decirme como hago para poder darle ubicaciones a las imágenes?, es decir quedan las dos en una sola pero en desorden como podría hacer que una quede en cierta parte y con cierto tamaño? gracias.

ecfisa
15-09-2014, 22:54:25
Hola Fabián.
Muchas gracias me a servido mucho, podrías decirme como hago para poder darle ubicaciones a las imágenes?, es decir quedan las dos en una sola pero en desorden como podría hacer que una quede en cierta parte y con cierto tamaño? gracias.

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

{ TImgRec }
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;

{ TForm1 }
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;

// Ejemplo de uso:
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;


Muestra:

http://sia1.subirimagenes.net/img/2014/09/15/140915104651968986.jpg

Saludos :)