2 Agosto 2019

c# 더블버퍼링 예제

다음 코드에 표시된 DrawCurves 메서드는 이 예제의 두 개의 나비 곡선을 그립니다. 왼쪽의 PictureBox는 이중 버퍼링을 사용하지만 오른쪽에 있는 PictureBox는 버퍼링을 사용합니다. 업데이트 : 난 그냥 당신이 컨트롤에 그리는 많은 상황에서 이중 버퍼링을 자동화 Control.SetStyle 방법이 있다는 것을 발견했습니다 – 양식 초기화에이 배치 : 더블 버퍼는 우리가 이미지에 우리의 모든 그래픽 요구를 그리는 기술이다 메모리 (버퍼)에 저장하고 우리가 우리의 모든 그리기 요구와 함께 완료 한 후 우리는 화면에 메모리에서 전체 이미지를 그립니다. 이렇게 하면 드로잉이 많은 작은 작업이 아닌 단일 작업에(응용 프로그램의 성능에 심하게 영향을 주는 작업)에 집중됩니다. .NET Framework 2.0에서는 이중 버퍼링 기술의 용이성과 사용이 크게 향상되었습니다. 이 기술을 사용하여 얻는 성능은 매우 좋으며 코딩을 너무 많이 사용하지 않으려는 모든 사람들에게 이 것을 권장합니다. 이러한 모든 예제에서 DrawProgressBar라는 함수를 호출합니다. 전달된 매개변수는 그리기에 사용되는 그래픽 인스턴스입니다. PictureBox 컨트롤에는 양식과 마찬가지로 DoubleBuffered 속성이 없습니다.

(아마도 그럴 수도 있지만.) 이중 버퍼링은 그래픽 프로그래밍을 다룬 사람이라면 누구나 알아야 할 기술을 사용하기에 좋고 간단합니다. 또한 Microsoft가 .NET Framework의 GUI 성능을 향상시키기 위해 많은 시간을 할애하고 즉흥적인 코드를 작성하는 데 시간을 낭비하는 대신 처리 할 수있는 더 나은 도구를 제공한 것을 보게되어 기쁩니다. 다행히도 이중 버퍼링을 직접 제공하기에 충분합니다. 메모리에 비트맵을 생성하고 그려간단합니다. 작업이 완료되면 픽처박스의 이미지 속성을 비트맵으로 설정합니다. 이렇게 하면 깜박임을 방지할 뿐만 아니라 페인트 이벤트 처리기를 작성하지 않고도 필요할 때마다 PictureBox가 자동으로 다시 그릴 수 있습니다. 참고: 아래에 언급된 모든 기술은 .NET Framework 1.1의 첫 번째 기술 및 .NET Framework 2.0용을 제외한 이 문서에서 제공하는 예제 소스 코드에 사용됩니다. SetStyle 메서드를 호출하여 최적화된DoubleBuffer 플래그를 true로 설정합니다. 애니메이션 또는 고급 메모리 관리와 같은 고급 이중 버퍼링 시나리오의 경우 고유한 이중 버퍼링 논리를 구현할 수 있습니다. 자세한 내용은 버퍼링된 그래픽을 수동으로 관리하는 방법을 참조하세요. DrawButterfly 메서드는 전달된 그래픽에 나비 곡선을 그리기만 하면 됩니다.

예제를 다운로드하고 이전 예제를 참조하여 작동 방식을 알아봅니다. 주제를 둘러본 적이 있다면 이에 대한 가장 일반적인 해결책은 이중 버퍼링일 것입니다. Control.DoubleBuffered를 true로 설정하면 컨트롤 스타일.AllPaintingInWmPaint 및 ControlStyles.OptimizedDoubleBuffer를 true로 설정합니다. 다음으로 코드는 비트맵과 연결된 그래픽 개체를 만들고 DrawButterfly 메서드를 호출하여 나비 곡선을 그립니다. 첫 번째 PictureBox의 이미지 속성을 비트맵으로 설정하고 새로 고칩니다. 이 예제에서는 간단한 깜박임이 표시됩니다. PictureBox를 지우지 않으면 아무 것도 알 수 없습니다. C#에서 그림을 그릴 때 깜박임을 방지하기 위해 이중 버퍼링 을 사용하는 예제에서는 양식이 이중 버퍼링을 사용하여 깜박임을 줄이는 방법을 보여 주어 있습니다. 양식이 생성될 때 화면에 모든 것을 그리는 대신 메모리의 이미지에 그려지고 이미지가 완료될 때만 결과를 표시합니다.

이를 이해하기 쉬운 예는 여러 계층이 있는 ProgressBar를 사용하는 것입니다. 내가 테스트 한 것에서이 기술은 별로 좋지 않으며 .NET Framework 1.1 (나중에 설명 될 예정)에 대한 수동 기술을 사용하는 것을 선호합니다.

Contact us

Get in touch with us!