• Sábado 20 de Abril de 2024, 04:24

Autor Tema:  Gráficos transparentes y problema de redibujado  (Leído 853 veces)

th3darkzi0n

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Gráficos transparentes y problema de redibujado
« en: Domingo 6 de Julio de 2008, 19:52 »
0
Mi problema es el siguiente (Es un poco complicado de explicar, espero se entienda):

Estoy desarrollando una aplicación en C# que debe mostrar un personaje animado
sobre la pantalla, no en una ventana comun, sino en algo así como una ventana
recortada con la forma del personaje.

La imagen del personaje tiene un fondo rojo que tomare como color transparente.
Creo una form invisible usando su BackgroundColor y TransparentKey, y pinto el personaje
sobre el form, usando un ImageAttributes con la ColorKey al correspondiente color invisible.


Código: Text
  1.  
  2. ImageAttributes attr = new ImageAttributes();
  3.  
  4. attr.SetColorKey(Color.Red,Color.Red);
  5.  
  6. obj_graphics.DrawImage( obj_img,
  7.             new Rectangle(0, 0, obj_img.Width, obj_img.Height),
  8.             0, 0, obj_img.Width, obj_img.Height,
  9.             GraphicsUnit.Pixel,
  10.             attr );
  11.  
  12.  

Hasta aquí sin problemas.

El problema está en cuando quiero dibujar otro frame del personaje. Este personaje puede
lucir distintos "estados de ánimo", tengo imagenes de cada uno y en ciertos momentos debo
dibujar una nueva imagen para mostrar el cambio.

De la misma manera que hoy dibujo la nueva imagen sobre el formulario.
Pero por tener estas imágenes un color de fondo transparente, y no no estar borrando el
contenido del form, dibuja sobre la imagen anterior, mostrando a esta en las zonas
donde la nueva imagen no pinto (En lo que sería su fondo).

Para resolverlo pruebo con distintas cosas que me dan resultados pero no el que quiero:


 - Borrar lo que haya en el form con obj_graphics.Clear(Color.Red)
 - Pintar un rectangulo relleno con el color de TransparentKey
 - Colocando la rutina de redibujado en el método OnPaint y llamando al metrodo Refresh() del formulario

MI PROBLEMA ES:
   Cuando voy a redibujar la imagen tengo un "parpadeo" en el formulario.

Pienso que eso se debe al momento en que tengo que borrar lo que ya hay dibujado para
que no se sobreimprima con lo anterior.

Ya probe de todo y nada funciona, si tengo que borrar lo que ya hay en el formulario, este
hace una fea desaparicion de unos milisegundos.

He visto programas del mismo estilo, en los que el personaje simplemente cambia sin ningun
efecto extraño.

La pregunta es: COMO LO HAGO?? cON QUE MÉTODO???

Quizá hay algo que se me escapa, lo quizá no estoy abordando el problema con el sistema correcto.

Agradesco desde ya su ayuda.