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