더북(TheBook)

다음으로는 녹색 배경으로 표현되어 있는 BITMAPINFOHEADER 구조체의 멤버들의 값을 분석해보자. BITMAPINFOHEADER 구조체의 크기를 나타내는 biSize의 값은 0x28이며, 이 값을 10진수로 바꾸면 40이다. biWidth와 biHeight는 각각 영상의 가로와 세로 크기인 4를 표시하고 있고, biPlanes는 항상 1이다. biBITCount는 숫자 8로 기록되어 있는데 이는 gray_4x4.bmp 파일의 영상이 픽셀 당 8비트를 사용하여 색상을 표현한다는 뜻이다. 즉, gray_4x4.bmp 파일이 28=256 색상을 사용하는 비트맵임을 의미한다. biCompression은 항상 0의 값을 갖고, biSizeImage는 0x10 0x00 0x00 0x00이다. 0x10은 십진수로 16이다. 이 값은 biWidth×biHeight ×(biBITCount/8) = 4×4×(8/8) = 16으로 계산된다. 만약 영상의 가로 크기가 4의 배수가 아니면 4의 배수로 맞추어 영상의 크기가 계산된다. BITMAPINFOHEADER의 나머지 멤버는 실제 영상의 픽셀 값에는 영향이 없는 멤버들이며, 설명을 생략한다.

gray_4x4.bmp 파일은 트루컬러 영상이 아니기 때문에, BITMAPINFOHEADER 구조체 다음에는 색상 테이블을 표현하는 RGBQUAD 구조체의 배열이 나타난다. RGBQUAD 구조체는 rgbBlue, rgbGreen, rgbRed, 그리고 rgbReserved에 해당하는 1바이트 크기의 멤버로 구성된다. 각각의 RGBBYTE 구조체 원소에서 rgbReserved에 해당하는 4번째 바이트는 항상 0x00으로 채워져 있다. gray_4x4.bmp 파일이 그레이스케일 영상이기 때문에 색상 테이블의 값은 0x00 0x00 0x00 0x00부터 시작하여 0xFF 0xFF 0xFF 0x00까지 차례대로 증가하게 된다.

그림 3-8에서 마지막 파란색 배경으로 표시된 부분은 각 픽셀의 색상 정보를 나타내는 픽셀 데이터 영역이며, 영상의 상하가 뒤집혀서 저장되어 있음을 볼 수 있다. 즉, 픽셀 데이터의 처음 4바이트인 0xFF 0xFF 0xFF 0xFF는 그림 3-4에서 4번째 줄에 해당하는 색상 정보이다. 반대로 맨 마지막에 나타나는 0x40 0x40 0x40 0x40은 그림 3-4의 맨 첫 번째 줄에 해당하는 색상 정보이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.