Двойная буферизация графики
Мерцание является распространенной проблемой при программировании графики. Графические операции, требующие нескольких сложных операций рисования, могут вызвать мерцание отображаемых изображений или иным образом нарушить их восприятие. Чтобы устранить эти проблемы, .NET Framework предоставляет доступ к двойной буферизации.
Двойная буферизация использует буфер памяти для решения проблем мерцания, связанных с несколькими операциями рисования. Если двойная буферизация включена, все операции рисования сначала обрабатываются в буфере памяти вместо области рисования на экране. После завершения всех операций рисования буфер памяти копируется непосредственно в связанную с ним область рисования. Поскольку на экране выполняется лишь одна графическая операция, удается избежать мерцания, связанного со сложными операциями рисования.
Двойная буферизация по умолчанию
Самый простой способ использования двойной буферизации в приложении — использование двойной буферизации по умолчанию для форм и элементов управления, предоставляемой .NET Framework. Вы можете включить двойную буферизацию для форм Windows и элементах управления 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 , представлена в разделе отрисовке буферизированной графики вручную. Дополнительные сведения об отрисовке графики см. в разделе Объекты Graphics и Drawing в Windows Forms.
См. также
- BufferedGraphics
- BufferedGraphicsContext
- BufferedGraphicsManager
- Практическое руководство. Отрисовка буферизированной графики вручную
- Практическое руководство. Уменьшение эффекта дрожания изображения посредством двойной буферизации для форм и элементов управления
- Практическое руководство. Управление буферизацией графики вручную
- Объекты Graphics и Drawing в Windows Forms