방법: 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 이벤트 처리기에서 그래픽 관련 메서드를 호출하지 마세요.

참고 항목