Condividi tramite


Grafica a doppio buffer

Aggiornamento: novembre 2007

Lo sfarfallio è un problema comune nella programmazione di grafica. Le operazioni di tipo grafico che richiedono più operazioni di disegno complesse possono determinare un apparente sfarfallio delle immagini visualizzate oppure attribuire loro un aspetto non accettabile. Per risolvere questi problemi, .NET Framework consente di accedere al doppio buffering.

Il doppio buffering utilizza una buffer di memoria per risolvere i problemi di sfarfallio associati a operazioni di disegno multiple. Quando il doppio buffering è attivo, di tutte le operazioni di disegno viene eseguito il rendering anzitutto in un buffer di memoria anziché sull'area del disegno sullo schermo. Una volta completate tutte le operazioni di disegno, il buffer di memoria viene copiato direttamente nell'area di disegno associata. Dato che sullo schermo viene eseguita una sola operazione di tipo grafico, lo sfarfallio dell'immagine associato alle operazioni di disegno più complesse viene eliminato.

Doppio buffering predefinito

Il modo più rapido per utilizzare il doppio buffering nelle applicazioni è applicare il doppio buffering predefinito per form e controlli fornito da .NET Framework. È possibile attivare il doppio buffering predefinito per Windows Form e controlli modificati per Windows impostando la proprietà DoubleBuffered su true oppure utilizzando il metodo SetStyle. Per ulteriori informazioni, vedere Procedura: ridurre lo sfarfallio nella grafica con il doppio buffering per form e controlli.

Gestione manuale della grafica memorizzata nel buffer

Per scenari di doppio buffering più avanzati, ad esempio animazioni o gestione avanzata della memoria, è possibile utilizzare le classi .NET Framework per implementare una logica di buffering doppio personalizzata. La classe responsabile per l'allocazione e la gestione dei singoli buffer grafici è la classe BufferedGraphicsContext. Ogni applicazione dispone di una propria istanza di BufferedGraphicsContext che gestisce la totalità del buffering doppio predefinito per l'applicazione. Nella maggioranza dei casi per ogni applicazione sarà disponibile un unico dominio, quindi generalmente per ogni applicazione sarà presente un oggetto BufferedGraphicsContext predefinito. Le istanze BufferedGraphicsContext predefinite vengono gestite dalla classe BufferedGraphicsManager. È possibile recuperare un riferimento all'istanza di BufferedGraphicsContext predefinita chiamando la proprietà BufferedGraphicsManager.Current. È inoltre possibile creare un'istanza di BufferedGraphicsContext dedicata, che consente di migliorare le prestazioni in applicazioni a elevato contenuto grafico. Per informazioni su come creare un'istanza di BufferedGraphicsContext, vedere Procedura: gestire manualmente le immagini memorizzate nel buffer.

Visualizzazione manuale della grafica memorizzata nel buffer

È possibile utilizzare un'istanza della classe BufferedGraphicsContext per creare buffer per grafica chiamando il metodo BufferedGraphicsContext.Allocate, che restituisce un'istanza della classe BufferedGraphics. Un oggetto BufferedGraphics gestisce un buffer di memoria associato a una superficie di rendering, ad esempio un form o un controllo.

Dopo la creazione dell'istanza, la classe BufferedGraphics gestisce il rendering in un buffer grafico in memoria. È possibile eseguire il rendering di grafica nel buffer di memoria tramite la proprietà BufferedGraphics.Graphics, che espone un oggetto Graphics che rappresenta direttamente il buffer di memoria. È possibile disegnare in questo oggetto Graphics esattamente come si farebbe con un oggetto Graphics che rappresenta un'area di disegno. Una volta disegnati gli elementi grafici nel buffer, è possibile utilizzare il metodo BufferedGraphics.Render per copiare il contenuto del buffer nell'area di disegno sullo schermo.

Per ulteriori informazioni sull'utilizzo della classe BufferedGraphics, vedere Rendering manuale di grafica memorizzata nel buffer. Per ulteriori informazioni sul rendering di elementi grafici, vedere Grafica e disegno in Windows Form

Vedere anche

Attività

Procedura: eseguire il rendering manuale di grafica memorizzata nel buffer

Procedura: ridurre lo sfarfallio nella grafica con il doppio buffering per form e controlli

Procedura: gestire manualmente le immagini memorizzate nel buffer

Riferimenti

BufferedGraphics

BufferedGraphicsContext

BufferedGraphicsManager

Altre risorse

Grafica e disegno in Windows Form