Freigeben über


Doppelt gepufferte Grafik

Flackern ist ein häufiges Problem beim Programmieren von Grafiken. Grafikvorgänge, die mehrere komplexe Malvorgänge erfordern, können dazu führen, dass die gerenderten Bilder flimmern oder ein anderweitig inakzeptables Erscheinungsbild aufweisen. Um diese Probleme zu beheben, bietet .NET Framework Zugriff auf doppelte Pufferung.

Bei der doppelten Pufferung wird ein Speicherpuffer verwendet, um die Flackerprobleme im Zusammenhang mit mehreren Lackiervorgängen zu beheben. Wenn die doppelte Pufferung aktiviert ist, werden alle Paint-Vorgänge zuerst in einem Speicherpuffer anstelle der Zeichnungsoberfläche auf dem Bildschirm gerendert. Nachdem alle Malvorgänge abgeschlossen wurden, wird der Speicherpuffer direkt auf die damit verknüpfte Zeichnungsoberfläche kopiert. Da nur ein Grafikvorgang auf dem Bildschirm ausgeführt wird, wird das Bildflimmern, das mit komplexen Malvorgängen verbunden ist, eliminiert.

Standard-Doppelpufferung

Die einfachste Möglichkeit zum Verwenden der doppelten Pufferung in Ihren Anwendungen besteht darin, die standardmäßige doppelte Pufferung für Formulare und Steuerelemente zu verwenden, die von .NET Framework bereitgestellt werden. Sie können die Standard-Doppelbufferung für Ihre Windows Forms und die erstellten Windows-Steuerelemente verwenden, indem Sie die Eigenschaft DoubleBuffered auf true setzen oder die SetStyle-Methode verwenden. Weitere Informationen finden Sie unter So reduzieren Sie das Flackern von Grafiken mit Doppelpufferung für Formulare und Steuerelemente.

Manuelles Verwalten von gepufferten Grafiken

Für komplexere Szenarien mit doppelter Pufferung, z. B. Animation oder erweiterte Speicherverwaltung, können Sie die .NET Framework-Klassen verwenden, um Ihre eigene Doppelpufferlogik zu implementieren. Die Klasse, die für das Zuordnen und Verwalten einzelner Grafikpuffer verantwortlich ist, ist die BufferedGraphicsContext Klasse. Jede Anwendungsdomäne verfügt über eine eigene Standardinstanz BufferedGraphicsContext, die alle standardmäßigen doppelten Puffer für diese Anwendung verwaltet. In den meisten Fällen gibt es pro Anwendung nur eine Anwendungsdomäne, daher gibt es in der Regel eine Standard-BufferedGraphicsContext pro Anwendung. Standardinstanzen von BufferedGraphicsContext werden von der BufferedGraphicsManager Klasse verwaltet. Sie können einen Verweis auf die Standardinstanz BufferedGraphicsContext abrufen, indem Sie Currentaufrufen. Sie können auch eine dedizierte BufferedGraphicsContext Instanz erstellen, die die Leistung für grafisch intensive Anwendungen verbessern kann. Informationen zum Erstellen einer BufferedGraphicsContext Instanz finden Sie unter So verwalten Sie gepufferte Grafiken manuell.

Manuelles Anzeigen von gepufferten Grafiken

Sie können eine Instanz der BufferedGraphicsContext Klasse verwenden, um Grafikpuffer zu erstellen, indem Sie die BufferedGraphicsContext.Allocateaufrufen, die eine Instanz der BufferedGraphics Klasse zurückgibt. Ein BufferedGraphics Objekt verwaltet einen Speicherpuffer, der einer Renderingoberfläche zugeordnet ist, z. B. einem Formular oder Steuerelement.

Nach der Instanziierung verwaltet die BufferedGraphics Klasse das Rendern in einem Grafikspeicherpuffer. Sie können Grafiken über die Graphicsim Speicherpuffer rendern, wodurch ein Graphics-Objekt verfügbar gemacht wird, das den Speicherpuffer direkt darstellt. Sie können zu diesem Graphics-Objekt genauso malen, wie Sie es bei einem Graphics-Objekt tun würden, das eine Zeichenoberfläche darstellt. Nachdem alle Grafiken auf den Puffer gezeichnet wurden, können Sie BufferedGraphics.Render verwenden, um den Inhalt des Puffers auf die Zeichenfläche auf dem Bildschirm zu kopieren.

Weitere Informationen zur Verwendung der BufferedGraphics-Klasse finden Sie unter Manuelles Rendern von gepufferten Grafiken. Weitere Informationen zum Rendern von Grafiken finden Sie unter Grafiken und Zeichnen in Windows Forms

Siehe auch