본문 바로가기
카테고리 없음

비트맵 알고 넘어가기

by 코리늬 2018. 3. 6.

bmp 영상을 화면에 출력하는 예제를 해보려하는데, 그러기 위해서는 BMP 파일에 대해 이해를 하고 있어야 한다.


비트맵

비트맵(BMP)은 컴퓨터에서 영상을 표현하는 대표적인 방법이다.

사용시 단순히 그림을 복사하여 화면에 보여주기 때문에 벡터를 이용한 방식보다 빠르다.

windows에서 지원하는 비트맵은 두 가지가 있다.

 1. 장치 의존 비트맵(Device Dependent Bitmap) DDB

 2. 장치 독립 비트맵(Device Independent Bitmap) DIB

이 중 영상처리에서는 DIB를 사용한다. 

그 이유는 출력장치가 달라지더라도 어디에서나 비트맵이 출력되기 때문이다. 이는 DIB에 자신의 색상을 표현하는 색상 테이블이 있기 때문이다.

 *참고 : 비트가 모여서 픽셀, 픽셀이 모여서 영상을 구성한다.


BMP 파일

BMP 파일은 확장자가 .bmp인 파일을 이야기 하며, 다른 영상 파일 형식과 달리 압축을 하지 않고 DIB구조를 그대로 파일로 저장한 형태이다.


BMP 파일 구조

구조는

비트맵 파일 헤더(BITMAPFILEHEADER) : BMP 파일 자체에 대한 정보를 담고 있는 영역

비트맵 정보 헤더(BITMAPINFOHEADER) : 비트맵 영상의 크기, 색상 수 등에 대한 정보를 담고 있는 영역

색상 테이블(팔레트) : 비트맵의 영상의 색상 정보를 담고 있는 부분, 비트맵의 색상 수에 따라 색상 테이블이 존재하지 않을 수도 있다

픽셀 데이터 : 각 픽셀의 색상 정보를 표현하는 공간(각 픽셀마다 3바이트를 사용해 BGR 표현)

의 4가지로 구성 되어있다.

BITMAPINFOHEADER구조체, 색상 테이블, 픽셀 데이터 부분을 합쳐 packed-DIB 포맷이라고 부르며 단순히 DIB구조라고 부르기도 한다.


BMP 파일 구조 중 색상 테이블 부분은 비트맵 파일의 속성에 따라 존재하지 않을 수도 있다고 했는데,

BMP 파일의 영상이 가지고 있는 색상이 256 색상 이하이면, 즉 생상 수가 2, 16, 256개인 경우에는 색상 테이블이 존재한다.

이와 달리 2의 24승 가지 색상을 표현할 수 있는 트루컬러 영상에는 색상 테이블 정보가 존재하지 않아 비트맵 정보 헤더 뒤에 픽셀 데이터 정보가 나타난다.(용량이 너무 크기 때문에)


그레이스케일 영상의 BMP 파일에는 256단계 무채색을 표현하는 RGBQUAD 배열이 저장되어있다. RGBQUAD 구조체 하나의 크기가 4바이트이므로 그레이 스케일 비트맵의 색상 테이블 영역의 크기는 256*4=1024바이트이다.

픽셀 데이터 부분에는 각 픽셀의 그레이스케일을 표현하는 RGBQUAD 배열의 인덱스가 저장되어 있다.

각각의 BMP파일 구조체에 대한 내용의 정의는 너무 많아서 필요한 정보를 검색해서 얻는 것이 좋다고 생각한다.


일반적으로 비트맵은 상하가 뒤집힌 상태로 저장된다.

비트맵인포헤더 구조체의 biheight가 양수로 저장되기 때문에 항상 뒤집힌 상태라고 생각해도 무방하다.

또한 효율적인 데이터 관리를 위해 영상의 가로 크기를 4의 배수로 저장한다. 예를들어 영상의 크기가 3x3이라 하더라도

실제로는 여분의 크기 1바이트를 추가해 4x3를 사용한다.


댓글