Podwójnie buforowana grafika

Migotanie jest powszechnym problemem podczas programowania grafiki. Operacje graficzne, które wymagają wielu złożonych operacji malowania, mogą spowodować, że renderowane obrazy będą migotać lub mają nieakceptowalny wygląd. Aby rozwiązać te problemy, .NET Framework zapewnia dostęp do podwójnego buforowania.

Podwójne buforowanie używa buforu pamięci do rozwiązania problemów z migotaniem związanych z wieloma operacjami malowania. Po włączeniu podwójnego buforowania wszystkie operacje malowania są najpierw renderowane w buforze pamięci, a nie na powierzchni rysowania na ekranie. Po zakończeniu wszystkich operacji malowania bufor pamięci jest kopiowany bezpośrednio na skojarzoną z nim powierzchnię rysowania. Ponieważ na ekranie jest wykonywana tylko jedna operacja grafiki, migotowanie obrazu skojarzone ze złożonymi operacjami malowania jest eliminowane.

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 dostarczanych przez .NET Framework. Możesz włączyć domyślne podwójne buforowanie dla kontrolek Windows Forms i authored Windows DoubleBufferedtrue, ustawiając właściwość na lub przy użyciu SetStyle metody . Aby uzyskać więcej informacji, zobacz Jak zmniejszyć migotanie grafiki za pomocą podwójnego buforowania formularzy i kontrolek.

Ręczne zarządzanie buforami grafiki

W przypadku bardziej zaawansowanych scenariuszy podwójnego buforowania, takich jak animacja lub zaawansowane zarządzanie pamięcią, można użyć klas .NET Framework, aby zaimplementować własną logikę podwójnego buforowania. Klasa odpowiedzialna za przydzielanie poszczególnych buforów grafiki i zarządzanie nimi to BufferedGraphicsContext klasa . Każda domena aplikacji ma własne wystąpienie domyślne BufferedGraphicsContext , które zarządza całym domyślnym podwójnym buforowaniem dla tej aplikacji. W większości przypadków istnieje tylko jedna domena aplikacji na aplikację, więc zazwyczaj istnieje jedna domena domyślna BufferedGraphicsContext dla aplikacji. Wystąpienia BufferedGraphicsContext domyślne są zarządzane przez klasę BufferedGraphicsManager . Odwołanie do wystąpienia domyślnego można pobraćBufferedGraphicsContext, wywołując .Current Można również utworzyć dedykowane wystąpienie BufferedGraphicsContext , które może zwiększyć wydajność aplikacji intensywnie obciążanych graficznie. Aby uzyskać informacje na temat sposobu tworzenia wystąpienia BufferedGraphicsContext , zobacz How to: Manually Manage Buffered Graphics (Jak ręcznie zarządzać buforową grafiką).

Ręczne wyświetlanie buforowanych grafiki

Za pomocą wystąpienia klasy można utworzyć BufferedGraphicsContext bufory grafiki, BufferedGraphicsContext.Allocatewywołując element , który zwraca wystąpienie BufferedGraphics klasy . Obiekt BufferedGraphics zarządza buforem pamięci skojarzonym z powierzchnią renderowania, taką jak formularz lub kontrolka.

Po jego wystąpieniach klasa BufferedGraphics zarządza renderowaniem w buforze graficznym w pamięci. Grafiki można renderować w buforze pamięci za pośrednictwem Graphics, który uwidacznia Graphics obiekt, który bezpośrednio reprezentuje bufor pamięci. Możesz malować do tego obiektu Graphics tak samo jak do obiektu Graphics reprezentującego powierzchnię rysowania. Po narysowaniu wszystkich grafiki do bufora można BufferedGraphics.Render użyć funkcji , aby skopiować zawartość buforu na powierzchnię rysowania na ekranie.

Aby uzyskać więcej informacji na temat używania klasy BufferedGraphics , zobacz Ręczne renderowanie buforowanych grafiki. Aby uzyskać więcej informacji na temat renderowania grafiki, zobacz Grafika i rysowanie w Windows Forms

Zobacz też