본문 바로가기

Programming/C++

Bitmap File구조


*Bimap File format(구조)

     

BITMAPFILEHEADER -> File header

:<Windows.h>에 정의, bmp파일인지 분석함!!, size : 14byte



bftype : bmp파일이라면 BM이라는 글자가 저장..

ex) if(bmfh.bftype != 0x4D42)비트맵 파일이 아닐 경우 처리...

*0x4D42는 아스키값으로서 보면 B와D를 나타냄..

  bfsize : bmp파일의 전체크기를 저장!(파일헤더+이미지헤더+컬러테이블+픽셀데이터)
 

BITMAPINFOHEADER -> Image header

:비트맵 파일에서 파일헤더 구조체 다음에 위치함!!,bmp파일에 대한 영상정보를 저장!

 

 

 

 

 

biBitCount : 1Pixel당 비트수 ->비트수에 따라 Pixel데이터를 처리 하는방법이 다름!!

256색,8Bit,24bit가 많이 쓰이고, 16,32bit는 거의 쓰이지 않음.

biSizeImage : 픽셀데이터의 크기를 저장 하고있음.(biHeight*biWidth와는 차이가 있음)

영상은 가로(Width)가 4의배수로 저장되어있는데 biSize는 이를 포함함.

 

RGBQUARD -> Color Table

: 색상 정보를 가지는 구조체, bmp파일의 pixel당 bit수에 따라 포맷형식이 다르다!

24bit이하 컬러는 RGB값을 나타내기 위해 컬러맵을 사용한다.(color table존재)

하지만 24Bit를 초과하는 비트맵은 컬러맵이 존재하지 않는다.

why? : RGBQUARD에는 각 맴버변수가 char형*3으로 선언 되어있다. char형은 0~255값을 저장할수있는데 이때 8Bit의 범위도 0~255이다. 즉 8bit범위를 초과하는 값은 저장할수없다는 것이다.

 

  *여기서 중요한건 Bitmap파일은 저장될 때 rgb의 순서가아니라 bgr순서로 저장되어있으므로 읽어올때는 반드시 bgr순서대로 읽어와야한다!

그리고 영상은 거꾸로 저장되어있다. 


Width 4의배수로 맞추기!!

Width = 4*(n*width)+31/32 여기서n은 1pixel당 비트수!!

ex) #define Width(x,n) 4*((n)*(Width))+31/32

 

 

'Programming > C++' 카테고리의 다른 글

[C++11] Rvalue Reference #2 - Move Semantics  (0) 2013.01.23
Lvalue Rvalue  (1) 2013.01.21
에러 핸들링(Error Handling)  (0) 2012.10.24
this pointer  (0) 2012.09.16
error C2065: 'IDD_Main_DIALOG' : 선언되지 않은 식별자입니다.  (0) 2012.07.25