Mostrar imagen sin parpadeo

19/10/2003 - 19:12 por Gandalf | Informe spam
Hola, estoy haciendo un clon del buscaminas y me encuentro con un molesto
parpadeo al dibujar. Estoy utilizando un mapa de bits oculto y en el evento
paint lo muestro:

private void PintarPanel(object sender, PaintEventArgs pea)

{

Graphics grfx=pea.Graphics;

grfx.DrawImage(tablero,0,0);

}


¿Alguna idea de como solucinarlo? Por cierto, aunque el tamaño de la imagen
sea muy pequeño a veces también se ve el parpadeo de la imagen.He intentado
también mostrar sólo la parte de la imagen que cambia pero sigue más o menos
igual.

Un Saludo y Gracias.

Preguntas similare

Leer las respuestas

#6 Gandalf
20/10/2003 - 20:05 | Informe spam
Hola, por fin!!!!!!!!!!!!!!!!!!!!!!

Gracias por vuestro tiempo y vuestras sugerencias, pero ya estaba usando lo
que me comentabais, además el tamaño del bitmap no era tan grande como para
producir ese efecto.

Simplemente sobrescribiendo el método OnPaintBackGround, para que se quede
quietecito sin dibujar nada ya se soluciona.
Como estaba dibujando en un Control tipo Panel, he tenido que usar herencia
para sobrescribirlo:
public class PanelPlus:Panel

{

protected override void OnPaintBackground(PaintEventArgs pevent)

{

}

}

He probado pintando imagenes de 1204x768 y funciona perfectamente, sin
necesidad siquiera de dibujar sólo la parte que cambia.

Lo que me pregunto ahora es como se podría hacer sin tener que usar
herencia, es decir, alguna forma de decirle al control que no es necesario
que dibuje el fondo.

Un Saludo y otra vez Gracias.
Respuesta Responder a este mensaje
#7 Oscar Calaf
22/10/2003 - 18:31 | Informe spam
Hay otra manera, tal vez más elegante de solucionar esto. Además puedes
solucionar de dos tiros lo del doblebuffer y lo del background.

Puedes usar la función SetStyle(System.Windows.Forms.ControlStyles)

En los controles que generamos solemos usar AllPaintingInWmPaint que
básicamente significa que tu Paint ya dibuja toda la area del control y que
por tanto el backcolor no necesita ser dibujado, esto corta de raiz los
parpadeos.
Saludos



"Gandalf" escribió en el mensaje
news:
Hola, por fin!!!!!!!!!!!!!!!!!!!!!!

Gracias por vuestro tiempo y vuestras sugerencias, pero ya estaba usando


lo
que me comentabais, además el tamaño del bitmap no era tan grande como


para
producir ese efecto.

Simplemente sobrescribiendo el método OnPaintBackGround, para que se quede
quietecito sin dibujar nada ya se soluciona.
Como estaba dibujando en un Control tipo Panel, he tenido que usar


herencia
para sobrescribirlo:
public class PanelPlus:Panel

{

protected override void OnPaintBackground(PaintEventArgs pevent)

{

}

}

He probado pintando imagenes de 1204x768 y funciona perfectamente, sin
necesidad siquiera de dibujar sólo la parte que cambia.

Lo que me pregunto ahora es como se podría hacer sin tener que usar
herencia, es decir, alguna forma de decirle al control que no es necesario
que dibuje el fondo.

Un Saludo y otra vez Gracias.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida