24비트 비트맵 분석 (비트맵 분석 #6)

윤찬호·2022년 11월 15일
0

이미지포맷

목록 보기
6/11

TEST

5x5 크기의 24비트 이미지 (격자 표시는 이해를 돕기 위한 표현입니다.)

비트맵 파일 헤더

파란색으로 표시된 부분이 비트맵 파일 헤더 (14byte) 이다.

bfType 42 4D (BM) BMP 파일 식별자
bfSize 86 00 00 00 BMP 파일 크기 134 (리틀 엔디안)
bfReserved1 00 00 예약된 공간1
bfReserved2 00 00 예약된 공간2
bfOffBits 36 00 00 00 픽셀 데이터 시작 위치 54 (리틀 엔디안)

크기를 계산할 때는 '리틀 엔디안'으로 계산한다. 이후에는 리틀 엔디안을 직접적으로 언급하지 않는다.

비트맵 정보 헤더

파란색으로 표시된 부분이 비트맵 정보 헤더 DIB (40byte) 이다.

biSize 28 00 00 00 비트맵 정보 헤더 크기 40
biWidth 05 00 00 00 비트맵 가로 크기 (px) 5
biHeight 05 00 00 00 비트맵 세로 크기 (px) 5
biPlanes 01 00 사용하는 색상판의 수 (항상 1) 1
biBitCount 18 00 픽셀 하나를 표현하는 비트 수 18 (3byte)
biCompression 00 00 00 00 압축방식 (보통 비트맵은 압축을 하지 않기 때문에 0) 0
biSizeImage 50 00 00 00 비트맵 이미지의 픽셀 데이터 크기
80
biXPelsPerMeter 00 00 00 00 비트맵 이미지의 가로 해상도 (미터당 픽셀 dpm) 0
biYPelsPerMeter 00 00 00 00 비트맵 이미지의 세로 해상도 (미터당 픽셀 dpm) 0
biClrUsed 00 00 00 00 색상 테이블에서 실제 사용되는 색상 수 0
biClrImportant 00 00 00 00 비트맵을 화면에 표현하기 위해 필요한 색상 인덱스 수 0

색상 테이블

24비트 비트맵 영상에는 색상 테이블이 없다. (1, 4, 8비트 비트맵에 존재)
따라서 비트맵 정보 헤더 다음에 오는 데이터들이 픽셀 데이터이다.

픽셀 데이터

비트맵 정보 헤더의 biBitCount (픽셀 하나를 표현하는 비트 수) 항목을 보면 값이 18로 표시되어 있다.
24비트 비트맵은 1픽셀을 표현하기 위해 B(1byte), G(1byte), R(1byte) 총 3바이트의 데이터를 사용한다. (RGB순서가 아닌 BGR순서라는 것에 주의하자)

5x5 크기의 24비트 비트맵 이미지에서 한 줄을 나타내는 바이트 수
53byte=155 * 3byte = 15 → 4의 배수 맞추기 → 16
즉, 한 줄을 표현하기 위해 16바이트를 사용한다.
(전체 픽셀 데이터 = 5*16 = 80 = biSizeImage)

파란색으로 선택된 16바이트의 데이터가 이미지의 최하단 1줄에 해당하는 데이터이다.
이미지의 가로너비가 5이고, 1픽셀을 나타내는데 3바이트가 사용되기 때문에 실제로 색상을 표현하는 데 사용되는 바이트는 15바이트(5*3) 이다. 마지막 1바이트의 데이터는 가로 너비를 4의 배수로 맞추기 위한 패딩 값에 해당한다.

파란색으로 선택된 데이터의 처음 3바이트 (hex: CC 48 3F)가 이미지의 좌하단 1픽셀의 데이터이다.
그림판에서 해당 픽셀의 색상을 추출해보면 값이 일치하는 것을 확인할 수 있다. (0xCC: 204, 0x48: 72, 0x3F: 63)

0개의 댓글