PDA

Ver la Versión Completa : Como crear mi propio doble buffering para mis aplicaciones


dinito
25-03-2007, 09:52:51
Hola a todos como están, bueno ahora les escribo a todos ustedes para que alguien me pueda ayudar con respecto al doble buffering para evitar los parpadeos de las imagenes que se pintan en una forma. Bueno de antemano les digo que ya utilice la propiedad DoubleBuffered = true y funciona muy bien, pero ahora lo que quiero es saber como puedo implementar mi propio buffering. Esto lo hago con el motivo de aprender como funciona esta utilidad ya que desconozco y tengo poco entendimiento con respecto a esto, y lo quiero es aprender. Gracias por su ayuda.

Ñuño Martínez
26-03-2007, 12:16:50
Pues seguro que se puede hacer metiéndote de lleno con el API de Windows y tal, pero hasta que llegue Seoane y nos lo resuelva puedes hacer más ligera la espera echando un vistazo a Allegro.pas (http://allegro-pas.sf.net) que incluye un ejemplo de cómo hacerlo.

seoane
26-03-2007, 13:23:38
Alguien llamo a un doctor??? :p :D

La técnica del doble buffer no es otra cosa que dibujar primero todo en un bitmap oculto y luego dibujar el bitmap en el formulario. Normalmente para dibujar el formulario primero se borra todo y luego se van dibujando cada uno de los controles, produciéndose el parpadeo, usando el buffer, vamos dibujando cada uno de los controles en un bitmap y luego dibujamos el bitmap sobre el formulario, evitando así el parpadeo.

La propiedad DoubleBuffered lo que hace es interceptar el mensaje WM_PAINT, y obliga al formulario a dibujarse en un bitmap en vez de hacerlo directamente en la pantalla. No se hasta que punto te interesa hacer esto a ti, en el mejor de los casos tendrías que interceptar y manejar tu mismo el mensaje WM_PAINT, con todo el trabajo extra que eso supone.

Aunque la técnica del doble buffer nos puede resultar útil en otros casos, por ejemplo, cuando estamos dibujando sobre un TImage o un TPaintbox alguna animación. El procedimiento habitual es dibujar un "frame" de la animación, borrar, dibujar el siguiente y volver a repetir la misma operación. Al borrar se produce el parpadeo del que hablábamos. El proceso con buffer sin embargo seria el siguiente: Crear un bitmap del mismo tamaño que el TImage o TPaintBox, dibujar el frame sobre el bitmap, dibujar el bitmap sobre el TImage o TPaintbox y repetir la operación. Como ves de esta manera se dibuja todo a la vez y sin necesidad de borrar primero lo anterior, lo que evita el parpadeo.

Vaya rollo que he soltado :p

dinito
30-03-2007, 20:09:20
Gracias a todos por la información, esta buena y clara, pero será posible que alguno de ustedes puedan darme un pequeño ejemplo en código donde pueda ver ese double buffering.