Unir varias imágenes (TImage) en una sóla
Hay un ejemplo antiguo en la página en la sección de ejemplos, titulado «Trocear un bitmap en n imágenes a modo de puzle». Hoy ha salido en los foros una pregunta sobre la operación contraria, ¿Cómo unir varios bitmaps (TImage) en una única imagen?
Puede ser algo trivial para los que llevamos un tiempo en esto, pero no tanto para los que empiezan; Reconozco que yo al principio también me liaba con los Canvas, los Rect, los ClientRect y no sabía cual copiar en cada cual. ;-)
El código para unir cuatro imágenes en una sóla formando un cuadro, es muy sencillo y sería algo así:
var ARect:TRect; path:string; begin // Añadir los 4 canvas a la nueva imagen ARect.Left := 0; ARect.Top := 0; ARect.Right := 48; ARect.Bottom := 48; imgDestino.Canvas.CopyRect(ARect, img1.Canvas, img1.ClientRect); ARect.Left := 48; ARect.Top := 0; ARect.Right := 92; ARect.Bottom := 48; imgDestino.Canvas.CopyRect(ARect, img2.Canvas, img2.ClientRect); ARect.Left := 0; ARect.Top := 48; ARect.Right := 48; ARect.Bottom := 92; imgDestino.Canvas.CopyRect(ARect, img3.Canvas, img3.ClientRect); ARect.Left := 48; ARect.Top := 48; ARect.Right := 92; ARect.Bottom := 92; imgDestino.Canvas.CopyRect(ARect, img4.Canvas, img4.ClientRect); // Path para grabarla a disco path := ChangeFileExt(Application.ExeName, '.bmp'); imgDestino.Picture.SaveToFile(path); MessageDlg('Se ha guardado la imagen con el nombre: ' + path, mtInformation, [mbOK], 0); |
Si en lugar de unirlas formando un cuadro, se quieren unir de otra forma (las 4 en línea, por ejemplo), basta con cambiar las coordenadas de destino.
Si hubiera que cambiar el tamaño final, por ejemplo para reducirlo hasta el de las imágenes originales, se podrían aplicar técnicas de antialiasing al redimensionar.
Un saludo.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…