Grafica a doppio buffer

Lo sfarfallio è un problema comune della programmazione della grafica. Le operazioni di grafica che richiedono più operazioni complesse di disegno possono causare lo sfarfallio o altri gravi problemi delle immagini sottoposte a rendering. Per risolvere questi problemi, .NET Framework fornisce l'accesso al doppio buffer.

Il doppio buffer usa un buffer di memoria per risolvere i problemi di sfarfallio associati a più operazioni di disegno. Quando il doppio buffer è abilitato, tutte le operazioni di disegno vengono prima sottoposte a rendering in un buffer di memoria invece che nella superficie di disegno visualizzata. Dopo che tutte le operazioni di disegno sono state completate, il buffer di memoria viene copiato direttamente nella superficie di disegno associata. Poiché sullo schermo viene eseguita una sola operazione di disegno, lo sfarfallio dell'immagine associato alle operazioni di disegno complesse viene eliminato.

Doppio buffer predefinito

Il modo più semplice per usare il doppio buffer nelle applicazioni consiste nell'usare il doppio buffer predefinito per form e controlli disponibile in .NET Framework. È possibile abilitare il doppio buffer predefinito per i controlli Windows Form e Windows creati impostando la DoubleBuffered proprietà su true o usando il SetStyle metodo . Per altre informazioni, vedere Procedura: Ridurre lo sfarfallio nella grafica con il doppio buffering per form e controlli.

Gestione manuale delle immagini memorizzate nel buffer

Per scenari di doppio buffer più avanzati, ad esempio l'animazione o la gestione avanzata della memoria, è possibile usare le classi di .NET Framework per implementare la propria logica di doppio buffer. La classe responsabile dell'allocazione e della gestione dei singoli buffer grafici è la BufferedGraphicsContext classe . Ogni dominio applicazione ha una propria istanza predefinita che gestisce tutto il doppio buffer predefinito BufferedGraphicsContext per tale applicazione. Nella maggior parte dei casi sarà presente un solo dominio applicazione per applicazione, quindi in genere esiste un solo dominio predefinito BufferedGraphicsContext per applicazione. Le istanze predefinite BufferedGraphicsContext vengono gestite dalla BufferedGraphicsManager classe . È possibile recuperare un riferimento all'istanza predefinita BufferedGraphicsContext chiamando .Current È anche possibile creare un'istanza dedicata BufferedGraphicsContext , che può migliorare le prestazioni per applicazioni a elevato utilizzo grafico. Per informazioni su come creare un'istanza BufferedGraphicsContext di , vedere Procedura: Gestire manualmente la grafica memorizzata nel buffer.

Visualizzazione manuale della grafica memorizzata nel buffer

È possibile usare un'istanza della BufferedGraphicsContext classe per creare buffer grafici chiamando , che restituisce un'istanza BufferedGraphicsContext.Allocatedella BufferedGraphics classe . Un BufferedGraphics oggetto gestisce un buffer di memoria associato a una superficie di rendering, ad esempio una maschera o un controllo.

Dopo che è stata creata un'istanza, la classe gestisce il BufferedGraphics rendering in un buffer grafico in memoria. È possibile eseguire il rendering della grafica nel buffer di memoria tramite Graphics, che espone un Graphics oggetto che rappresenta direttamente il buffer di memoria. È possibile disegnare a questo Graphics oggetto esattamente come si farebbe con un Graphics oggetto che rappresenta una superficie di disegno. Dopo che tutti gli elementi grafici sono stati disegnati nel buffer, è possibile usare per BufferedGraphics.Render copiare il contenuto del buffer nell'area di disegno sullo schermo.

Per altre informazioni sull'uso della classe , vedere Rendering manuale della BufferedGraphics grafica memorizzata nel buffer. Per altre informazioni sul rendering della grafica, vedere Grafica e disegno in Windows Form

Vedi anche