Двойная буферизация графики
Мерцание является распространенной проблемой при программировании графики. Графические операции, требующие нескольких сложных операций рисования, могут привести к тому, что визуализируемые изображения будут мерцать или иметь неприемлемый внешний вид. Чтобы устранить эти неполадки, .NET Framework предоставляет доступ к двойной буферизации.
При двойной буферизации для решения проблем, связанных с многократным повторением операций рисования, используется буфер в памяти. Если двойная буферизация включена, все операции рисования сначала выполняются в памяти, а лишь затем на экране компьютера. После завершения всех операций рисования содержимое буфера копируется из памяти непосредственно на связанную с ним область экрана. Поскольку на экране выполняется лишь одна графическая операция, мерцание, которое часто возникает в сложных операциях рисования, исчезает.
Двойная буферизация по умолчанию
Самый простой способ использования двойной буферизации — включить двойную буферизацию по умолчанию для всех форм и элементов управления, предоставляемых .NET Framework. Чтобы включить двойную буферизацию для форм Windows Forms и элементов управления Windows, необходимо присвоить свойству DoubleBuffered значение true или воспользоваться методом SetStyle. Дополнительные сведения см. в разделе Практическое руководство. Уменьшение эффекта дрожания изображения посредством двойной буферизации для форм и элементов управления.
Управление буферизацией графики вручную
В более сложных случаях буферизации, например для отображения анимации или при сложном управлении памятью, можно воспользоваться для реализации собственной логики двойной буферизации классами .NET Framework. За выделение отдельных буферов графики и управление ими отвечает класс BufferedGraphicsContext. У каждого домена приложения есть собственный экземпляр BufferedGraphicsContext по умолчанию, который управляет всей двойной буферизацией по умолчанию для данного приложения. В большинстве случаев у приложения имеется лишь один домен и один экземпляр BufferedGraphicsContext по умолчанию. Экземпляры BufferedGraphicsContext по умолчанию управляются классом BufferedGraphicsManager. Ссылку на экземпляр BufferedGraphicsContext по умолчанию можно получить, обратившись к свойству BufferedGraphicsManager.Current. Кроме того, можно повысить производительность приложений, активно использующих графические возможности, создав выделенный экземпляр BufferedGraphicsContext. Дополнительные сведения о создании экземпляра BufferedGraphicsContext см. в разделе Практическое руководство. Управление буферизацией графики.
Вывод буферизованной графики вручную
Чтобы использовать экземпляр класса BufferedGraphicsContext для создания графических буферов, можно вызвать метод BufferedGraphicsContext.Allocate, который возвращает экземпляр класса BufferedGraphics. Объект BufferedGraphics служит для управления буфером памяти, связанным с областью отображения, например с формой или элементом управления.
После создания объекта класса BufferedGraphics этот объект будет управлять отрисовкой изображения непосредственно в буфере памяти. Для передачи изображения в буфер памяти можно использовать свойство BufferedGraphics.Graphics, которое служит для доступа к объекту Graphics, представляющему собой содержимое этого буфера памяти. Передача изображений этому объекту Graphics ничем не отличается от передачи изображений объекту Graphics, который представляет собой область экрана. После записи всей информации об изображении в буфер можно воспользоваться методом BufferedGraphics.Render, чтобы скопировать содержимое буфера в нужную область экрана.
Дополнительные сведения об использовании класса BufferedGraphics см. в разделе Визуализация буферизированной графики вручную. Дополнительные сведения о визуализации графики см. в разделе Объекты Graphics и Drawing в Windows Forms
См. также
Задачи
Практическое руководство. Визуализация буферизированной графики вручную
Практическое руководство. Управление буферизацией графики