Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   exportar 2 Timage en 1 (https://www.clubdelphi.com/foros/showthread.php?t=86674)

FabianSiza 15-09-2014 01:46:54

exportar 2 Timage en 1
 
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.
Cita:

Empezado por FabianSiza (Mensaje 481464)
hola como estan quisiera saber como exportar 2 o mas Timage en 1...
como hago para que todos salgan en uno solo? gracias

Código Delphi [-]
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:
Código Delphi [-]
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:



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.
Cita:

Empezado por FabianSiza (Mensaje 481514)
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.

Código Delphi [-]
...
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:



Saludos :)


La franja horaria es GMT +2. Ahora son las 22:15:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi