Podwójnie buforowana grafika

Migotanie jest typowym problemem podczas programowania grafiki. Operacje graficzne, które wymagają wielu złożonych operacji malowania, mogą spowodować, że renderowane obrazy wydają się migać lub mieć w inny sposób niedopuszczalny wygląd. Aby rozwiązać te problemy, program .NET Framework zapewnia dostęp do podwójnego buforowania.

Buforowanie podwójne używa buforu pamięci do rozwiązywania problemów z migotaniem skojarzonych z wieloma operacjami malowania. Po włączeniu podwójnego buforowania wszystkie operacje malowania są najpierw renderowane do buforu pamięci zamiast powierzchni rysunkowej na ekranie. Po zakończeniu wszystkich operacji malowania bufor pamięci jest kopiowany bezpośrednio do powierzchni rysunku skojarzonej z nią. Ponieważ na ekranie jest wykonywana tylko jedna operacja graficzna, usuwa się migotanie obrazu skojarzone ze złożonymi operacjami malowania.

Domyślne podwójne buforowanie

Najprostszym sposobem użycia podwójnego buforowania w aplikacjach jest użycie domyślnego podwójnego buforowania formularzy i kontrolek udostępnianych przez program .NET Framework. Możesz włączyć domyślne podwójne buforowanie dla formularzy systemu Windows i utworzonych kontrolek systemu Windows, ustawiając DoubleBuffered właściwość na true lub przy użyciu SetStyle metody . Aby uzyskać więcej informacji, zobacz How to: Reduce Graphics Flicker with Double Buffering for Forms and Controls (Instrukcje: zmniejszanie migotania grafiki za pomocą podwójnego buforowania formularzy i kontrolek).

Ręczne zarządzanie buforowaną grafiką

W przypadku bardziej zaawansowanych scenariuszy podwójnego buforowania, takich jak animacja lub zaawansowane zarządzanie pamięcią, można użyć klas programu .NET Framework do zaimplementowania własnej logiki podwójnego buforowania. Klasa odpowiedzialna za przydzielanie poszczególnych buforów graficznych i zarządzanie nimi jest klasą BufferedGraphicsContext . Każda domena aplikacji ma własne wystąpienie domyślne BufferedGraphicsContext , które zarządza wszystkimi domyślnymi podwójnym buforowaniem dla tej aplikacji. W większości przypadków będzie istnieć tylko jedna domena aplikacji na aplikację, więc zazwyczaj jedna domyślna BufferedGraphicsContext dla aplikacji. Wystąpienia domyślne BufferedGraphicsContext są zarządzane przez klasę BufferedGraphicsManager . Odwołanie do wystąpienia domyślnego BufferedGraphicsContext można pobrać, wywołując polecenie Current. Możesz również utworzyć dedykowane BufferedGraphicsContext wystąpienie, które może zwiększyć wydajność dla aplikacji intensywnie korzystających z grafiki. Aby uzyskać informacje na temat tworzenia BufferedGraphicsContext wystąpienia, zobacz Instrukcje: Ręczne zarządzanie buforowaną grafiką.

Ręczne wyświetlanie buforowanej grafiki

Możesz użyć wystąpienia BufferedGraphicsContext klasy, aby utworzyć bufory graficzne, wywołując BufferedGraphicsContext.Allocateklasę , która zwraca wystąpienie BufferedGraphics klasy . Obiekt BufferedGraphics zarządza buforem pamięci skojarzonym z powierzchnią renderowania, taką jak formularz lub kontrolka.

Po utworzeniu BufferedGraphics wystąpienia klasa zarządza renderowaniem w buforze grafiki w pamięci. Grafikę można renderować do buforu pamięci za pośrednictwem Graphicsobiektu , który uwidacznia Graphics obiekt, który bezpośrednio reprezentuje bufor pamięci. Możesz malować do tego Graphics obiektu tak samo, jak Graphics w przypadku obiektu reprezentującego powierzchnię rysunkową. Po narysowaniu całej grafiki do buforu można użyć BufferedGraphics.Render elementu , aby skopiować zawartość buforu na powierzchnię rysunku na ekranie.

Aby uzyskać więcej informacji na temat korzystania z BufferedGraphics klasy, zobacz Ręczne renderowanie buforowanej grafiki. Aby uzyskać więcej informacji na temat renderowania grafiki, zobacz Grafika i rysowanie w formularzach systemu Windows

Zobacz też