비트맵 특징 (비트맵 분석 #3)

윤찬호·2022년 3월 1일
0

이미지포맷

목록 보기
3/11

1. 표현 색상 수

비트맵 이미지는 한픽셀을 처리하는 방법을 기준으로 1비트, 2비트, 4비트, 8비트, 15비트, 16비트, 24비트, 32비트 등이 있다.

1, 4, 8, 비트 비트맵 이미지는 팔레트 방식으로 이미지에서 사용하는 색상의 종류를 미리 정해 놓고 이미지의 데이터에서는 색상의 인덱스를 가지는 형식이다. (색상 테이블 사용)

15비트 비트맵 이미지는 R, G, B가 각 5비트로 구성되는 이미지를 말한다.
16비트 비트맵 이미지는 기존 15비트 이미지에서 G 부분을 6비트로 사용하는 것이다.

24비트 비트맵 이미지는 RGB 모두 8비트씩 사용하고 하나의 픽셀이 3바이트로 구성된다.
표현 색상 수가 2^24 (16,777,216)가지로 PC에서 표현할 수 있는 가장 뛰어난 품질의 형식이다.
따라서 24비트 비트맵을 트루컬러라고 부른다.

1-1. 픽셀 표현 방법

비트맵 파일은 픽셀 하나를 몇 비트로 저장하느냐에 따라 구조가 달라진다.

픽셀당 1, 4, 8 비트
각각의 주소 공간을 하나하나 기준 세워서 각각의 주소에 해당 색상을 하나하나 대응 (팔레트 / 색상테이블)

픽셀당 16, 24, 32 비트
비트를 적당히 잘라 앞의 몇 비트는 R, 중간의 몇 비트는 G, 끝의 몇 비트는 B의 밝기를 표시하는 방법 (색심도 RGB)

(1) 인덱스에 의한 컬러 모드 (1,4,8비트 비트맵)

1, 4, 8비트 비트맵
픽셀 데이터에 팔레트(색상 테이블)의 번호를 가리키는 인덱스를 저장한다.

  • 흑백 (1비트 비트맵)

  • 그레이스케일 (8비트 비트맵) : RGB 값이 모두 동일 (검정:0, 흰색:255) (0,0,0 ~ 255,255,255)
    밝기 정보만으로 구성된 영상 (검정~회색~흰색)

(2) 트루컬러 모드 (24비트 비트맵)

  • 24비트 비트맵: 1픽셀에 3바이트(B,G,R, 각 1바이트) 사용. 가장 많이 사용되는 비트맵 형식.
    실제 색상이 저장되는 순서는 RGB 순서가 아니라 BGR 순서이다

2. 압축

일반적으로 데이터를 압축하지 않고 사용되지만 RLE 압축 방식을 지원한다.

RLE (Run Length Encoding)
한 문자(한 byte)가 몇 번 반복되는지를 저장하는 방식. 같은 문자가 여러번 반복되는 데이터에 대해 효율적인 압축방법.

비트맵 방식은 영상의 전체 크기(가로x세로)에 해당하는 픽셀 정보를 모두 저장해야 하기 때문에 메모리 용량을 많이 차지하는 단점이 있지만, 압축 기법을 사용하지 않고 표현이 직관적이어서 분석이 용이하다. 또한 비트맵 방식은 복잡한 계산 없이 단순히 그림을 복사하여 보여주기 때문에 벡터 방식보다 화면 출력 속도가 빠르다.


3. 비트맵은 상하가 뒤집힌 상태로 저장된다

일반적으로 비트맵 이미지는 상하가 뒤집힌 상태로 저장된다. (비트맵 분석 #4 참고)


우리가 보는 이미지가 왼쪽 그림이라면 실제 비트맵 파일의 구조는 오른쪽 이미지와 같이 상하를 반대로 저장한다. (좌우는 그대로)

즉, 비트맵 파일의 첫 픽셀의 정보는 그림의 가장 아래쪽 첫번째 픽셀이 된다.


4. 가로너비는 4바이트의 배수

BMP파일의 너비 (영상의 가로길이)는 항상 4바이트의 배수를 맞춘다.
→ BMP 이미지의 가로 한 줄을 나타내기 위해 4의 배수 바이트를 맞춘다.

메모리로 영상을 로드할 때 영상의 너비는 항상 4의 배수인 바이트로 맞춰 주어야 한다.
왜냐하면 효율적인 데이터 관리를 위하여 영상을 4바이트 단위로 읽어 들이기 때문이다.

1비트 비트맵의 경우 1픽셀을 나타내는데 1비트를 사용한다.
1비트 비트맵은 흑,백 두 가지 색상을 나타낼 수 있다. 흑:0 (0x00), 백:1 (0xff)

위 이미지와 같이 1비트 비트맵 4x1 영상인 경우 4픽셀을 나타내기 위해 4비트를 사용한다.
→ 0 1 0 1

단지 4비트만 있으면 위 이미지를 표현할 수 있지만 BMP파일의 너비 (영상의 가로길이)는 항상 4바이트의 배수를 맞춰야 하기 때문에 4바이트가 필요하다. (0의 패딩 비트를 채운다.)

1바이트2바이트3바이트4바이트
01010000000000000000000000000000



1비트 BMP 파일의 한 줄을 나타내는 바이트 수
(401 x 400 크기의 이미지)
401 x (1/8)byte = 50.124 → 4의 배수 맞추기 → 52
파일 크기 = 52 x 400 + (BMP 헤더, 색상테이블)

24비트 트루컬러 BMP 파일의 한 줄을 나타내는 바이트 수
(401 x 400 크기의 이미지)
401 x (1x3)byte = 1203 → 4의 배수 맞추기 → 1024
파일크기 = 1024 x 400 + (BMP 헤더)
(24비트 비트맵은 1픽셀을 나타내기 위해 3바이트가 사용된다 (R,G,B 각 1바이트)


BMP 한 줄을 나타내는 바이트 구하기

bmpWidthBytes = ((biBitCount * biWidth + 31) >> 5) << 2

0개의 댓글