Doppelt gepufferte Grafiken

Flimmern ist ein häufiges Problem beim Programmieren von Grafiken. Grafikoperationen, die mehrere komplexe Zeichenvorgänge erfordern, können dazu führen, dass gerenderte Bilder flimmern oder anderweitig nicht ordnungsgemäß dargestellt werden. Um diese Probleme zu beheben, stellt .NET Framework Zugriff auf doppelte Pufferung bereit.

Bei der doppelten Pufferung werden Flimmerprobleme, die durch mehrere Zeichenoperationen entstehen, mithilfe eines Arbeitsspeicherpuffers behoben. Wenn die doppelte Pufferung aktiviert ist, werden alle Zeichenoperationen anstelle der Zeichenoberfläche auf dem Bildschirm zunächst in einen Arbeitsspeicherpuffer gerendert. Nachdem alle Zeichenoperationen abgeschlossen sind, wird der Arbeitsspeicherpuffer direkt in die damit verbundene Zeichenoberfläche kopiert. Da auf dem Bildschirm nur eine Grafikoperation ausgeführt wird, wird das durch komplexe Zeichenoperationen ausgelöste Bildflimmern beseitigt.

Standardmäßige doppelte Pufferung

Die einfachste Möglichkeit, die doppelte Pufferung in Anwendungen zu verwenden, bietet die doppelte Pufferung für Formulare und Steuerelemente, die standardmäßig von .NET Framework bereitgestellt wird. Sie können die standardmäßige doppelte Pufferung für Windows Forms und erstellte Windows-Steuerelemente aktivieren, indem Sie die DoubleBuffered-Eigenschaft auf true festlegen oder die SetStyle-Methode verwenden. Weitere Informationen finden Sie unter Gewusst wie: Reduzieren von Grafikflimmern mit doppelter Pufferung für Formulare und Steuerelemente.

Manuelles Verwalten gepufferter Grafiken

Bei anspruchsvolleren Szenarien mit doppelter Pufferung, wie Animationen oder erweiterter Speicherverwaltung, können Sie mithilfe der .NET Framework-Klassen Ihre eigene doppelte Pufferungslogik implementieren. Diese Klasse, die für die Zuordnung und Verwaltung einzelner Grafikpuffer verantwortlich ist, ist die BufferedGraphicsContext-Klasse. Jede Anwendungsdomäne besitzt ihre eigene BufferedGraphicsContext-Standardinstanz, die alle standardmäßigen doppelten Pufferungen für diese Anwendung verwaltet. In den meisten Fällen verfügt jede Anwendung nur über eine Anwendungsdomäne, d. h. normalerweise ist jeder Anwendung ein standardmäßiger BufferedGraphicsContext zugeordnet. BufferedGraphicsContext-Standardinstanzen werden von der BufferedGraphicsManager-Klasse verwaltet. Sie können einen Verweis auf die BufferedGraphicsContext-Standardinstanz durch Aufrufen von Current abrufen. Sie können auch eine dedizierte BufferedGraphicsContext-Instanz erstellen, die die Leistung von grafisch anspruchsvollen Anwendungen verbessern kann. Informationen über die Erstellung einer BufferedGraphicsContext-Instanz finden Sie unter Gewusst wie: Manuelles Verwalten von gepufferten Grafiken.

Manuelles Anzeigen gepufferter Grafiken

Sie können eine Instanz der BufferedGraphicsContext-Klasse verwenden, um Grafikpuffer zu erstellen, indem Sie BufferedGraphicsContext.Allocate aufrufen, was eine Instanz der BufferedGraphics-Klasse zurückgibt. Das BufferedGraphics-Objekt verwaltet einen Arbeitsspeicherpuffer, der mit einer Renderingoberfläche verknüpft ist, beispielsweise ein Formular oder ein Steuerelement.

Nach der Instanziierung verwaltet die BufferedGraphics-Klasse das Rendering an einen Grafikpuffer im Arbeitsspeicher. Sie können Grafiken mithilfe der Graphics-Eigenschaft in den Arbeitsspeicherpuffer rendern, wodurch ein Graphics-Objekt verfügbar gemacht wird, das dem Arbeitsspeicherpuffer direkt entspricht. Sie können in dieses Graphics-Objekt ebenso zeichnen wie in ein Graphics-Objekt, das eine Zeichenoberfläche darstellt. Nachdem alle Grafiken in den Puffer gezeichnet wurden, können Sie die BufferedGraphics.Render-Methode verwenden, um den Inhalt des Puffers in die Zeichenoberfläche auf dem Bildschirm zu kopieren.

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

Weitere Informationen