CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: th3darkzi0n en Domingo 6 de Julio de 2008, 19:52
Título: Gráficos transparentes y problema de redibujado
Publicado por: th3darkzi0n en Domingo 6 de Julio de 2008, 19:52
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
ImageAttributes attr = new ImageAttributes();
attr.SetColorKey(Color.Red,Color.Red);
obj_graphics.DrawImage( obj_img,
new Rectangle(0, 0, obj_img.Width, obj_img.Height),
0, 0, obj_img.Width, obj_img.Height,
GraphicsUnit.Pixel,
attr );
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.