비트맵개요 BMP 파일의이해실제 BMP 파일의분석 BMP 파일을화면에출력
} 비트맵 (bitmap) 윈도우즈에서영상을표현하기위해사용되는윈도우즈 GDI(Graphic Device Interface) 오브젝트의하나 } 벡터그래픽 (vector graphics) 점, 선, 면등의기본적인그리기도구를이용하여그림을그리는방식 } 윈도우즈 GDI(Graphic Device Interface) 윈도우즈에서화면및프린터출력을위해사용되는도구들 (pen, brush, bitmap, font, region, etc) 2
} 장치의존비트맵 (Device Dependent Bitmap) 출력장치 ( 화면, 프린터등 ) 의설정에따라출력이다르게나타나는형태 } 장치독립비트맵 (Device Independent Bitmap) 출력장치가달라지더라도항상정상적인형태로출력되는비트맵 BMP 파일은윈도우즈환경에서비트맵을 DIB 의형태로저장한파일포맷 3
} 일반적으로비트맵이란 픽셀값들을나타낸 2 차원어레이 4
} BMP 파일의전체구조 BITMAPFILEHEADER 비트맵파일에대한정보 BITMAPINFOHEADER 비트맵자체에대한정보 BMP 파일구조 RGBQUAD 배열 색상테이블 DIB 구조 color/index 배열 픽셀데이터 5
} BITMAPFILEHEADER 구조체 typedef struct tagbitmapfileheader { WORD bftype; DWORD bfsize; WORD bfreserved1; WORD bfreserved2; DWORD bfoffbits; } BITMAPFILEHEADER, *PBITMAPFILEHEADER; ( 참고 ) 여러가지영상파일포맷 BMP : 마이크로소프트윈도우즈기본영상포맷 ( 비압축 ) JPG : 주로 24비트포맷의트루컬러영상을손실압축형태로저장 GIF : 256 색상이하의영상을무손실압축 6
} BITMAP FILE HEADER Name Size Semantics Type 2 Byte BMP 파일임을나타내는태그. 0x42 0x4D (BM) for BMP BA: OS/2 Bitmap Array CI: OS/2 Color Icon CP: OS/2 Color Pointer IC: OS/2 Icon PT: OS/2 Pointer Size 4 Byte BMP 파일의크기 (in byte) Reserved 1 2 Byte 특정 application 등의용도를위하여비워놓은자리. 일반적으로 0 Reserved 2 2 Byte 특정 application 등의용도를위하여비워놓은자리. 일반적으로 0 Offset 4 Byte 실제픽셀정보 (bitmap data) 가시작되는위치 (in byte) 7
} BITMAPINFOHEADER 구조체 typedef struct tagbitmapinfoheader{ DWORD bisize; LONG biwidth; LONG biheight; WORD biplanes; WORD bibitcount; DWORD bicompression; DWORD bisizeimage; LONG bixpelspermeter; LONG biypelspermeter; DWORD biclrused; DWORD biclrimportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER; 8
} BITMAP INFO HEADER (DIB Header) Name Size Semantics Size 4 Byte The size of the header (in byte, default 40) Width 4 Byte Bitmap width in number of pixels Height 4 Byte Bitmap height in number of pixels Plane 2 Byte Number of color planes used. Always 1. BitCount 2 Byte Number of bits per pixel. (also color depth. 1, 4, 8, 16, 24, 32) Compression 4 Byte Compression Method used. 0 for no compression. ImageSize 4 Byte Image size for raw bitmap data in byte. XPelsPerMeter 4 Byte Horizontal resolution. Pixels per meter. YPelsPerMeter 4 Byte Vertical Resolution. Pixels per meter NumColors 4 Byte Number of colors in the palette. 0 이면 BitCount 에서지정한 color 수모두사용. 아닌경우는 RGBQUAD 구조체의크기를의미 NumImportant 4 Byte Number of important colors. 0 인경우모두색상이중요. 일반적으로 0 이며무시한다. 9
} Values for BITMAP INFO HEADER (DIB Header) Field Semantics Size 12: OS/2 V1 (OS/2, Win 3.0) 64: OS/2 V2 40: Win V3 (Win 3.0), default 108: Win V4 (Win 95/NT4) 128: Win V5 (Win 98/20) Compression 0: no compression. Most common. 1: Run length encoding for 8 bit/pixel 2: Run length encoding for 4 bit/pixel 3: Bit field. 16 or 32 bit/pixel 4: JPEG 5: PNG 10
} RGBQUAD 구조체의배열 typedef struct tagrgbquad { BYTE rgbblue; BYTE rgbgreen; BYTE rgbred; BYTE rgbreserved; } RGBQUAD; RGBQUAD 구조체의배열은트루컬러비트맵에서는존재하지않음 그레이스케일비트맵의경우, (0, 0, 0, 0)~(255, 255, 255, 0) 이차례대로저장됨 11
} 픽셀데이터 그레이스케일비트맵 : RGBQUAD 배열의인덱스저장 트루컬러비트맵 : (B, G, R) 순서로픽셀값저장 } 상하가뒤집힌상태로저장 (bottomup) 12
} Bitmap data 는 4 바이트단위로정렬 3 4 3 3 } Row_Size 4 é ColorDepth ê 32 PictureWidth ù ú 13
} 트루컬러 BMP 파일의분석 Little Endian!!! [B G R] = [ ] [ ] [ ] [ ] 42 4D 66 36 28 04 04 01 18 30 13 0B 13 0B 14
} 그레이스케일 BMP 파일의분석 40 40 C0 40 40 C0 C0 C0 42 4D 46 04 36 04 28 04 04 01 08 10 23 0B 23 0B 01 01 01 01 01 02 02 02 03 03 03 04 04 04 05 05 05 06 06 FE C0 C0 C0 C0 40 40 40 40 15