시스템 모니터링 프로젝트를 작성하다 보면, 현재의 시스템 상태를 그래픽으로 출력하는 경우가 많습니다. 기름 탱크를 예로 들어 보겠습니다. 기름 탱크에 남아 있는 잔류량을 그래픽으로 출력하려 합니다.

네트워크나 직접 측정하여 잔류량을 확인하고, 확인되는 대로 화면에 그래픽을 출력해야 합니다. 아마도 보통 아래와 같은 모습으로 출력될 것입니다.

이런 처리를 위해 보통 그림 파일을 2 개 준비하고, 확인되는 값에 따라 나누어 화면에 출력합니다.

여기서 주의해야 할 점은 얼마나 빠르게 화면이 갱신되는 지를 확인해야 합니다. 갱신 시간이 느리다면 그나마 다행인데, 빠르다면 변경되는 부분이 이전 화면과 겹쳐서 깜빡이는 모습이 보이게 되는데, 참 보기 좋지 않습니다. 특히, 변화가 많은 부분에 글씨라도 출력한다면 문제는 더욱 심각해 집니다.

이 문제를 해결하기 위해서는 출력하려는 그래픽을 화면에 직접 출력하여 그리지 말고, 다른 곳에 모두 그린 후에, 모두 그려진 이미지를 화면에 출력해야 이런 문제를 해결할 수 있습니다. 즉, 아래와 같이 말이죠.

이렇게 화면에 출력하기 전에 미리 도화지가 되는 A 부분을 준비해야 하는데, gxLib 0.5.1gxBmpCreate() 함수를 준비했고, 아울러 TBitmap에도 셀 값을 가져오는 GetPixel() 뿐만 아니라 픽셀의 칼라 값을 변경할 수 있는 SetPixel() 함수도 추가했습니다. 그러므로 gxBmpCreate() 함수를 이용하여 메모리 상에 TBitmap 영역을 만들어 놓고, SetPixel() 함수를 이용하여 그림을 그린 후, gxBitBlt()함수를 이용해서 화면에 출력하면 화면 깜빡임 없이 그래픽을 출력할 수 있습니다.

gxLib 0.5.2 버전업 내용

  • gxbmp.c 에서 칼라 16 이외의 다른 색상 깊이에 대한 가상 함수를 임시로 정의
  • 함수 이름과 주석을 다시 정리
  • gmBmpCreate() 함수 사용 예를 추가