Hola, estoy haciendo una aplicación en la que tengo dos imágenes con transparencia en las que pinto. Una está sobre la otra, de tal manera que superpongo una imagen delante de otra para formar un dibujo completo (por ejemplo en la imagen de fondo dibujo unas montañas y en la que está delante unos árboles), la intención es crear escenarios del tipo de los juegos antiguos, basados en Tiles.
El problema me surge cuando quiero guardar las dos imágenes en una sola, hasta ahora he estado usando la función CopyRect para pintar en la imagen felizmente, pero ya no puedo hacerlo de la misma manera, ya que la imagen superior sobreescribe totalmente a la inferior, lo que me gustaría es que las partes de la imagen superior con color igual a TransparentColor no se dibujaran, quedando la imagen inferior visible.
Creo que será más aclarativo si enseño el código:
Código Delphi
[-]procedure TFrmPrincipal.Button1Click(Sender: TObject);
var
FotoPNG : TPngImage; FotoBMP : TBitmap; Tamaño: TRect; begin
FotoBMP := TBitmap.Create;
FotoBMP.TransparentColor:=ImgTitleset.Picture.Bitmap.TransparentColor;
try
FotoBMP.Width:=ImgCapa1.Width;
FotoBMP.Height:=ImgCapa1.Height;
Tamaño.Left := 0;
Tamaño.Top := 0;
Tamaño.Right := FotoBMP.Width;
Tamaño.Bottom := FotoBMP.Height;
FotoBMP.Canvas.CopyRect(Tamaño,ImgCapa1.Picture.Bitmap.Canvas,Tamaño);
FotoBMP.Canvas.CopyRect(Tamaño,ImgCapa2.Picture.Bitmap.Canvas,Tamaño);
FotoPNG:=TPngImage.Create;
FotoPNG.Assign(FotoBMP);
FotoPNG.SaveToFile('C:\Users\Kandorf\Desktop\prueba.png');
FotoPNG.Free;
finally
FotoBMP.Free;
end;
end;
Buscando he encontrado que se podría hacer creando una máscara en blanco y negro y utilizando CopyMode:=cmSrcAnd, pero no tengo ni idea de cómo crear esa máscara.
Si queréis que muestre una imagen del programa para entenderlo mejor decídmelo.
Saludos y gracias por vuestro tiempo.