방법: Windows Forms에서 깜빡임을 줄이기 위한 픽셀 복사

간단한 그래픽에 애니메이션 효과를 주면 사용자에게 깜박임이나 기타 원치 않는 시각적 효과가 발생할 수 있습니다. 이 문제를 제한하는 한 가지 방법은 그래픽에서 "bitblt" 프로세스를 사용하는 것입니다. Bitblt는 픽셀의 원점 사각형에서 픽셀의 대상 사각형으로 색 데이터의 "비트 블록 전송"입니다.

Windows Forms에서는 CopyFromScreen 클래스의 메서드를 사용하여 bitblt를 Graphics 수행합니다. 메서드의 매개 변수에서 원본 및 대상(점으로), 복사할 영역의 크기 및 새 도형을 그리는 데 사용되는 그래픽 개체를 지정합니다.

아래 예제에서 도형은 해당 이벤트 처리기의 폼에 Paint 그려집니다. 그런 CopyFromScreen 다음, 메서드를 사용하여 도형을 복제합니다.

참고

폼의 속성을 DoubleBufferedtrue 설정하면 이벤트의 그래픽 기반 코드가 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 그리는 콘텐츠는 폼의 크기가 변경되거나 다른 폼에 의해 가려지는 경우 다시 그려지지 않으므로 이벤트 처리기에서 그래픽 관련 메서드를 호출하지 마십시오.

추가 정보