2009. 9. 23. 17:31

BitBlt 개념 정리

출처: http://1and0.tistory.com/entry/BitBlt-개념-정리

 

보통 윈도우에서 그리기를 할 때 메모리 DC(CompatibleDC)와 메모리 Bitmap(CompatibleBitmap)를 사용하여 BitBlt 함수로 드로잉 작업을 한다.

그래서 이에 대해 개인적으로 정리를 하고자 한다.

BitBlt 함수 정리
  • 메모리 DC는 CreateCompatibleDC를 사용하여 생성할 수 있다.
    • 이렇게 생성한 DC는 더블 버퍼링등에 활용한다.
  • DC의 전경색은 SetTextColor로 변경할 수 있다.
  • DC의 배경색은 SetBkColor로 변경할 수 있다.
  • 메모리 비트맵은 CreateCompatibleBitmap을 사용하여 만들어진다.
  • CreateCompatibleBitmap 함수는 인자로 넘겨지는 DC와 호환되는 비트맵을 생성한다.
    • 인자로 CPaintDC 등이 넘어오면 screen 과 같은 Color Format이 만들어진다.
    • 인자로 CreateCompatibleDC 함수로 생성된 메모리 DC가 넘어오면 흑백 비트맵이 만들어진다.
      • 메모리 DC은 초기에 1-by-1의 흑백 비트맵이 선택된 상태로 생성된다.
      • 이 때 전경색은 흑색(Black)이고 배경색은 흰색(White)이다.
      • 크기를 인자로 주면 그 크기의 메모리 비트맵이 초기 전경색인 흑색으로 채워진(Fill) 상태로 생성된다.
      • CPaintDC 등도 초기 기본 값은 전경색은 흑색이고 배경색은 흰색이다.
  • 메모리 비트맵은 메모리 DC에 선택(SelectObject, SelectBitmap) 한 다음 사용한다.
  • 메모리 비트맵의 이미지를 출력하기 위해선 메모리 DC를 소스 DC인자로 여러 그리기 함수를 호출한다.
  • BitBlt 함수는 다음과 같은 특성을 가진다.
    • 마지막 인자인 dwRop 인자로 여러가지 그리기 모드를 설정할 수 있다.
    • 소스와 대상 DC의 칼라 포맷이 다르다면 이 함수는 소스 칼라 포맷을 대상 칼라 포맷에 맞도록 변환한다. 이때 대상 비트맵(DC가 아닐까)의 전경색과 배경색이 변환에 사용된다.
    • 흑백 비트맵을 칼라 비트맵으로 변환할 때, white bit(1)을 배경색으로 변환하고 black bit(0)을 전경색으로 변환한다. 이 때는 대상 DC의 전경색과 배경색이 사용된다.
    • 칼라 비트맵을 흑백 비트맵으로 변환할 때, 배경색과 일치 하는 픽셀을 white로 그렇지 않은 픽셀을 black로 변환한다. 이 때는 칼라 DC의 전경색과 배경색을 사용한다.