방법: Windows Forms에서 깜빡임을 줄이기 위한 픽셀 복사
간단한 그래픽에 애니메이션 효과를 주면 깜박임이나 기타 바람직하지 않은 시각 효과가 발생할 수 있습니다. 이 문제를 제한하는 한 가지 방법은 그래픽에서 “Bitblt” 프로세스를 사용하는 것입니다. Bitblt은 픽셀의 원점 사각형에서 픽셀의 대상 사각형으로의 색 데이터의 “비트 블록 전송”입니다.
Windows Forms를 사용하면 Bitblt은 Graphics 클래스의 CopyFromScreen 메서드를 사용하여 수행됩니다. 메서드의 매개 변수에서 원본 및 대상(포인트), 복사할 영역의 크기, 새 도형을 그리는 데 사용되는 그래픽 개체를 지정합니다.
아래 예제에서는 Paint 이벤트 처리기의 양식에 도형을 그립니다. 그런 다음, CopyFromScreen 메서드를 사용하여 도형을 복제합니다.
참고
양식의 DoubleBuffered 속성을 true
로 설정하면 Paint 이벤트의 그래픽 기반 코드가 이중 버퍼링됩니다. 아래 코드를 사용할 때 눈에 띄는 성능 향상은 없지만 이는 더 복잡한 그래픽 조작 코드로 작업할 때 유의해야 할 사항입니다.
예제
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a circle with a bar on top.
e.Graphics.FillEllipse(Brushes.DarkBlue, New Rectangle _
(10, 10, 60, 60))
e.Graphics.FillRectangle(Brushes.Khaki, New Rectangle _
(20, 30, 60, 10))
' Copy the graphic to a new location.
e.Graphics.CopyFromScreen(New Point(10, 10), New Point _
(100, 100), New Size(70, 70))
End Sub
private void Form1_Paint(System.Object sender,
System.Windows.Forms.PaintEventArgs e)
{
e.Graphics.FillEllipse(Brushes.DarkBlue, new
Rectangle(10,10,60,60));
e.Graphics.FillRectangle(Brushes.Khaki, new
Rectangle(20,30,60,10));
e.Graphics.CopyFromScreen(new Point(10, 10), new Point(100, 100),
new Size(70, 70));
}
코드 컴파일
위의 코드는 양식의 Paint 이벤트 처리기에서 실행되므로 양식을 다시 그릴 때 그래픽이 유지됩니다. 따라서 양식의 크기가 조정되거나 다른 양식에 의해 가려지면 그리기 콘텐츠가 다시 그려지지 않으므로 Load 이벤트 처리기에서 그래픽 관련 메서드를 호출하지 마세요.
참고 항목
.NET Desktop feedback