'파일'에 해당되는 글 1건

  1. 2009.10.24 [BMP] BMP 파일의 구조
파일 구조2009.10.24 23:08

BMP 파일의 이미지 파일 중 가장 기본적인 파일 형태입니다.

BMP 파일의 특징은 압축이 되어 있지 않아 이미지를 읽어 들이는데에 별도의 연산이 필요하지 않기 때문에 JPG나 GIF 형태의 포멧보다 처리속도가 상당히 빠르며 이미지 파일 포멧 중 가장 화질이 좋은 반면 압축처리를 하지 않음으로써 파일의 용량이 큰 단점을 가지고 있습니다.

1. BMP 파일의 종류

DDB (Device Dependent Bitmap) : 장치에 종속적인 비트맵.
컴퓨터 시스템의 디스플레이 장치가 가지고 있는 부가적인 정보를 이용하여 출력합니다.

장점 : 디스플레이의 정보를 이용함으로 출력 속도가 빠릅니다.
단점 : 다른 종류의 디스플레이 장치에서는 제대로 표현되지 않을 수 있습니다.

DIB (Device Independent Bitmap) : 장치에 독립적인 비트맵.
디바이스(장치)가 가지고 있는 정보를 이용하지 않고 파일 자체적으로 Bitmap을 출력하기 위한 모든 정보를 가지고 있습니다.

장점 : Bitmap을 출력하기 위한 모든 정보를 가지고 있어서 어떠한 디스플레이 장치에서도 동일한 이미지를 표현할 수 있습니다.
단점 : DDB 방식보다 출력속도가 느립니다.

위와 같이 BMP에는 두가지 종류가 존재합니다. 우리가 흔히 보는 bmp 확장자를 가지고 있는 이미지 파일은 DIB 방식으로 저장된 Bitmap 데이타이고 이 파일을 읽어들여 출력하기 위해서 재정의된 형태가 DDB 입니다. 물론, bmp확장자를 가진 파일이 꼭 DIB방식으로 저장된 파일이라고는 할 수 없지만 다양한 시스템에서 사용하기 위하여 현재 bmp 파일로 저장 되어지는 형태는 거의 DIB라고 생각하시면 됩니다.

2. BMP 파일의 구조

 파일 정보 (Bitmap File Header)
 이미지 정보 (Bitmap Info Header)
 색상 테이블 (Pallette)
 이미지의 실제 데이타

파일 정보 (Bitmap File Header)

typedef struct tagBITMAPFILEHEADER {
   WORD bfType; // 파일의 타입 (Bitmap 파일은 반드시 0x42, 0x4D 'BM' 이라고 되어 있어야 함)
   DWORD bfSize; // 파일의 크기 (Byte)
   WORD bfReserved1; // 예약된 값 Reserved (예비값으로 사용되진 않는다. 0x00)
   WORD bfReserved2; // 예약된 값 Reserved (예비값으로 사용되진 않는다. 0x00)
   DWORD bgOffBits; // 실제 이미지 데이타의 offset (파일 정보, 이미지 정보, 색상 테이블 구조체의 크기를 더한 값)
} BITMAPFILEHEADER

 Offset
 Offset  Description
 0x00  파일의 타입 (Bitmap 파일은 반드시 0x42, 0x4D 'BM' 이라고 되어 있어야 함)
 0x02  파일의 크기 (Byte)
 0x06  예약된 값 Reserved (예비값으로 사용되진 않는다. 0x00)
 0x08  예약된 값 Reserved (예비값으로 사용되진 않는다. 0x00)
 0x0A  실제 이미지 데이타의 offset (파일 정보, 이미지 정보, 색상 테이블 구조체의 크기를 더한 값)
(Type : WORD - 2byte, DWORD - 4byte)

이미지 정보 (Bitmap Info Header)

typedef struct tagBITMAPINFOHEADER {
   DWORD biSize; // 이 구조체의 크기
   LONG biWidth; // 비트맵의 가로 픽셀 수 (넓이)
   LONG biHeight; // 비트맵의 세로 픽셀 수 (높이)
   WORD biPlanes; // 비트맵의 플래인 수 (반드시 1로 고정되어야 한다.)
   WORD biBitCount; // 한 픽셀이 가지는 색의 수를 비트로 나타냄 (2의 제곱승으로 표현 - 1이면 흑백(2^1), 4이면 16색(2^4) ... )
   DWORD biCompression; // 압축방식 (BI_RGB : 압축x, BI_RLE4 : 4bit 압축, BI_RLE8 : 8bit 압축)
   DWORD biSizeImage; // 이미지의 크기 (byte)
   LONG biXPelsPerMeter; // 가로 해상도 (미터당 가로 픽셀)
   LONG biYPelsPerMeter; // 세로 해상도 (미터당 세로 픽셀)
   DWORD biClrUsed; // 비트맵에 사용된 색상 수 (0일 경우 모든 색상을 다 사용한다는 의미)
   DWORD biClrImportant; // 비트맵 출력시 필수적인 색상 수 (0일 경우 모든 색상을 다 사용한다는 의미)
} BITMAPINFOHEADER;

 Offset 
0x0E  이미지 정보(Bitmap Info Header)의 크기
0x12  비트맵의 가록 픽셀 수 (넓이)
0x16  비트맵의 세로 픽셀 수 (높이)
0x1A  비트맵의 플래인 수 (반드시 1로 고정되어야 한다.)
0x1C  한 픽셀이 가지는 색의 수를 비트로 나타냄 (2의 제곱승으로 표현 - 1이면 흑백(2^1), 4이면 16색(2^4) ... )
0x1E  압축방식 (BI_RGB : 압축x, BI_RLE4 : 4bit 압축, BI_RLE8 : 8bit 압축) BI_RGB(압축x)일 경우 이 값은 0
0x22  이미지의 크기 (byte)
0x26  가로 해상도 (미터당 가로 픽셀) 거의 사용되지 않음
0x2A  세로 해상도 (미터당 세로 픽셀) 거의 사용되지 않음
0x2E  비트맵에 사용된 색상 수 (0일 경우 모든 색상을 다 사용한다는 의미)
0x32  비트맵 출력시 필수적인 색상 수 (0일 경우 모든 색상을 다 사용한다는 의미)
0x36  비트맵 데이타

색상 테이블 (0x36)

사용하는 경우도 있고 사용하지 않는 경우도 있다.
사용할 경우 첫번째 색상의 BGR, 두번째 색상의 BGR 순으로 테이블이 생성 됩니다.

저작자 표시 비영리
신고

'파일 구조' 카테고리의 다른 글

[BMP] BMP 파일의 구조  (0) 2009.10.24
[JPEG] JPEG의 파일구조  (0) 2009.10.10
[JPEG] JPEG 개요  (0) 2009.10.09
Posted by 코멧'★

티스토리 툴바