본문 바로가기
Windows API/Ghost의 API BITMAP 파일 구조

API BITMAP 파일 구조...

by dark ghost 2012. 10. 19.
728x90
반응형

API BITMAP 파일 구조.

그림 1) BIPMAP 파일 구조.

1. BITMAP이란? 그림 파일의 압축 포맷 형태이다. 확장자는 bmp 이고 파일 크기가 크다는 단점이 있다. 그리고 유명한 jpg와 gif 파일들이 있다. 그리고 그 중에서 BITMAP 파일의 구조에 대해 알아보려 한다. 일단 그림 1)처럼  BITMAP 파일은 FILE HEADER, IMAGE HEADER, COLOR TABLE, PIXEL DATA 라는 4단계 구조로 되어 있다.

 

그림 2) FILBITMAPFILEHEADER 의 크기.

2. 처음 1단계 구조체인 FILE HEADER 의 크기는 그림 2) 와 같다.

 

그림 3) BITMAPFILEHEADER 의 구조체 코드.

3. 비트맵파일인지 아닌지를 확인하는 변수가 bfType 이다. BMP파일의 첫 두 바이트는 항상 "BM" 문자가 저장된다. bfOffBits 는 파일 시작부분에서 실제 영상데이터가 존재하는 위치까지 바이트 단위의 거리를 나타낸다. WORD 는 unsigned short, DWORD 는 unsigned long 으로 정의되어 있다.

 

그림 4) FILE HEADER 정보.

4. 비트맵 파일을 헥사 에디트라는 툴에 넣으면 FILE HEADER 정보를 볼 수 있다. 간단한 그림 파일을 넣어 보았다. 처음에 2 Byte 는 아스키 코드로 아스키 코드표를 참조 하면 BM 이라는 것을 알 수 있고 BM은 BITMAP 파일에만 있다. 다음 부분은 4 Byte 로 되어있는 부부인데 파일의 크기(용량) 정보를 가지고 있다. 그 다음 2 Byte, 2 Byte 는 그림 2에서 처럼 사용 하지 않는 것을 볼 수있다. 마지막 4 Byte 는 데이터의 시작 좌표인데 36번지에서 데이터가 시작 되는 것을 볼 수있다.

 

그림 5) BITMAPINFOHEADER 의 크기.

 

그림 6) BITMAPCORHEADER 의 크기.

5. 그림 5)와 그림 6)의 구조체를 보면 차이가 있는데, 바로  헤더의 크기이다.윈도우에서 지원하는 BMP의 경우 헤더의 크기가 최소 4Byte가 필요하며, 그렇기에 수치적으로 쉽게 구분을 할 수 있다. 이제 구조체를 하나하나 보면, 이미지 헤더의 역활은 이미지의 비트수와 크기, 차원, 그리고 압축여부를 알려주는 역활을 한다. 즉, 이미지 자체의 정보를 갖고  있다고 보면 된다. 

 

그림 7) BITMAPINFOHEADER의 구조체 코드.

6. 그림 7)은 비트맵 영상에 대한 크기, 흑백, 칼라 정보, 팔레트 크기 정보등을 저장하기 위한 구조체 변수 이며, 중요한 정보는 영상 파일의 크기를 나타내는 변수 biHeight, biWidth 그리고 흑백과 칼라 여부를 나타내는 biBitCount, 팔레트 크기를 나타내는 biCirUsed 등이다. biBitcount 가 8이면 흑백영상이거나 2^8 = 256 칼라의 영상이다. 24 Bit 라며 트루칼라, 16이면 2^16 개의 칼라를 사용하는 영상이다.

 

그림 8) RGBQUAD 구조체의 크기.

그림 9) RGBTRIPLE 구조체의 크기.

7. 그림 8)과 그림 9)는 컬러 팔레트이며, 컬러팔레트는 세가지 포맷형식을 사용한다. 이는  bmp 화일의 비트수에 의해 구분이 되는데, 1, 4, 8비트를 갖는 이미지인 경우 RGB 값을 나타내기 위해 컬러맵을 사용한다. 비트수는 이미지 헤더에서 biBitCount 나 bcBitCount 에서 판단할 수 있다. 여기서 윈도우 bmp화일인 경우는 RGBQUAD 구조체를 사용하고, OS/2 에서는 RGBTRIPLE 구조체를 이용 한다. 세번째 포맷 형식은 컬러맵을 사용 하지 않는다.

 

그림 10) RGBQUAD 구조체 코드.

8. 그림 10)은 컬러팔레트 중에 RGBQUAD 구조체의 코드이며, 인덱스에 의한 칼라값을 저장하기 위한 구조체이다. 이 구조체를 사용, 팔레트 수만큼 배열을 할당, 저장한다. 256 칼라모드의 경우 팔레트배열의 크기는 256이 되고, 16비트 칼라 영상의 경우 2^16개의 팔레트 배열의 크기를 가지게 된다.

 

그림 11) BMP 파일의 저장 되는 방식.

9. 마지막으로 BMP 파일의 저장되는 방식인데, 일반적으로 BMP 파일이 바로 보이기 때문에 바로 저장 되는 것처럼 보일 것이다. 하지만 사람의 눈에 이미지가 반대로 상을 매쳐서 보이 듯이 BMP 파일도 반대로 저장 된다. 자세 한건 그림 11)을 참조 하기 바람.

 

 

   

 

 

 

 

 

 

728x90
반응형

댓글