개발/Java

[JAVA] 더블 버퍼링

hojak99 2016. 7. 24. 09:54

더블 버퍼링은 이미지의 애니메이션, 많은 페인팅 작업을 처리할 시에 흔히 발생하는 화면 깜빡임 현상을 최소화하여 보다 부드럽고 자연스러운 화면을 보여줄 수 있도록 하는 방법이다. 



더블 버퍼링은 메모리상의 버퍼를 생성하여 화면에 그릴 내용을 먼저 버퍼에 그린 후, 버퍼에 모든 페인팅 작업이 끝나게 되면 그 내용을 한꺼번에 출력하는 것이다. 즉 버퍼 2개를 만들어서 두개 중 하나는 화면에 출력하는 동안 다른 하나는 다음에 화면에 출력될 화면을 그리를 것이다.

 예를 들면 버퍼 a, b가 있을 때 a가 버퍼에 그리고 있으면 b는 출력을 하고 있고 b가 출력을 완료하고 버퍼에 그릴 시 a는 화면에 출력을 하는 것이다.



실제 더블 버퍼링을 구현하는 과정은

1. 메모리상에 실제 이미지 사이즈 만큼의 이미지 버퍼를 생성한다.

2. 생성한 이미지 버퍼에 대한 Graphics 객체를 얻어온다.

3. 이제, 리턴된 Graphics 객체를 통해 원하는 페인팅 작업을 모두 수행한다.

4. 메모리 그래픽 버퍼에 대한 모두 완료되면 실제 화면의 Graphics 객체의 메소드를 사용하여 한번에 메모리 그래픽 버퍼에 저장된 내용을 화면에 출력한다.


이런 식으로 더블 버퍼링을 구현할 수 있다.


내부 버퍼에서 일어나는 일은 외부에서 보이지 않기 때문에 더블 버퍼링을 사용하면 깜빡임을 볼 수 없다. 




(어떤 블로그에서 "윈도우즈에서는 내부 버퍼를 메모리에 직접 작성할 필요가 없는데 비트맵이 내부 버퍼 역할을 해주기 때문이다"라고 했다.)






출처 : http://chaejiho.tistory.com/

 : http://msonic.tistory.com/

 : http://shinluckyarchive.tistory.com/

반응형