API

큰 사이즈 그래픽(그림, 이미지) 화일 처리시 팁

디버그정 2008. 9. 5. 12:21

이미지를 처리하는 경우... 보통 WM_PAINT  메시지 처리부에
리소스나 파일에서 DDB를 생성하고 화면에 뿌려주는 작업을 한다.

그런데 이경우 작은 파일의 경우는 별 상관이 없으나.
크기가 큰 파일의 경우 로딩하고 뿌리는 데 상당한 부하가 일어난다.
실제로 노트북의 경우 크기 1024*680 정도의 파일을 읽어서
화면 크기만 줄였다 늘였다 해도(WM_PAINT 메시지 발생)
상당히 버벅거림을 볼 수 있었다.

그래서 미리 DDB를 저장하는 변수를 만들어서 DDB 로딩을 먼저 시키고
그 핸들값을 저장한 후 처리해봤다. 이 경우 유효한 DDB가 있는 상태이니
WM_PAINT에서는 그냥 로딩은 하지 않고 뿌리는 작업만 하면 된다.
부하가 없어졌다. 이 결과로 비추어 볼때
화일에서 DDB를 생성하는 작업이 상당한 오버로드를 가진 듯 하다.

큰 파일을 스크롤 처리할 경우 이런 식으로 반드시 처리해야 될 듯 싶다.
대상은 동일하고 스크롤링에 따라 표시할 화면만 잘 맵핑시키면 된다.

그리고 그래픽 파일 로딩 프로그램 제작시....메인윈도우의 브러쉬를
NULL_BRUSH로 설정하는 게 현명하다.
백그라운드 이미지를 지우는 작업이 일어나지 않으므로 무의미한
깜빡거림이 사라진다.. 이 경우 물론 WM_PAINT 메시지에서
전체 클라이언트 영역에 대한 처리를 해야 한다.