Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-03-2011
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Hacer CopyRect sin TransparentColor

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 [-]
// Proceso de guardado
procedure TFrmPrincipal.Button1Click(Sender: TObject);
var
  FotoPNG : TPngImage; // La quiero guardar en formato PNG
  FotoBMP  : TBitmap; // Mapa de bits temporal en el que formo la imagen que voy a guardar
  Tamaño: TRect; // Proporciones de la imagen que voy a guardar
begin
  FotoBMP := TBitmap.Create;
  FotoBMP.TransparentColor:=ImgTitleset.Picture.Bitmap.TransparentColor;
  try
    // Le doy el tamaño a la imagen temporal
    FotoBMP.Width:=ImgCapa1.Width;
    FotoBMP.Height:=ImgCapa1.Height;

    // Le doy los valores al objeto de tipo TRect
    Tamaño.Left := 0;
    Tamaño.Top := 0;
    Tamaño.Right := FotoBMP.Width;
    Tamaño.Bottom := FotoBMP.Height;

    //FotoBMP.Canvas.CopyMode:=cmSrcAnd; // Los CopyMode son intentos fallidos
    FotoBMP.Canvas.CopyRect(Tamaño,ImgCapa1.Picture.Bitmap.Canvas,Tamaño);
    //FotoBMP.Canvas.CopyMode:=cmSrcPaint;
    //FotoBMP.Canvas.CopyMode:=cmPatPaint;
    // Al hacer el siguiente paso copio la segunda imagen tal cual, sobreescribiendo el color "transparente" las zonas de la imagen de fondo
    FotoBMP.Canvas.CopyRect(Tamaño,ImgCapa2.Picture.Bitmap.Canvas,Tamaño);

    // Lo paso a PNG
    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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como hacer if 1,2,3..... Panasys Varios 10 13-10-2010 21:03:08
hacer mi chateador Reinery C++ Builder 2 27-12-2006 00:34:13
Problemas con TransparentColor rsantosr Varios 3 28-09-2005 02:32:29
Razones para hacer (o no hacer) ejercicio Nuria Humor 1 02-09-2004 13:05:43


La franja horaria es GMT +2. Ahora son las 05:51:25.


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
Copyright 1996-2007 Club Delphi