bmp 파일 처리 -...
TRANSCRIPT
![Page 1: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/1.jpg)
BMP 파일 이해
김성영교수
금오공과대학교
컴퓨터공학과
![Page 2: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/2.jpg)
2
학습 내용
BMP 파일의구조
BMP 파일의특징
![Page 3: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/3.jpg)
3
BMP 파일의 구조
File Header (BITMAPFILEHEADER)
Bitmap Info. Header (BITMAPINFOHEADER)
LUT (RGBQUAD [])
Headers of BMP
Image Data
![Page 4: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/4.jpg)
444
typedef struct tagBITMAPFILEHEADER{WORD bfType; // Specifies the file type
// It must be "BM" (4D42)
DWORD bfSize; // 파일의크기 (byte)
WORD bfReserved1; // reserved (항상 0)
WORD bfReserved2; // reserved (항상 0)
DWORD bfOffBits; // 픽셀데이터의시작오프셋
} BITMAPFILEHEADER;
![Page 5: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/5.jpg)
555
typedef struct tagBITMAPINFOHEADER {DWORD biSize; // 구조체의크기 (bytes)
LONG biWidth; // 비트맵의가로 길이 (pixels)
LONG biHeight; // 비트맵의세로 길이 (pixels)
WORD biPlanes; // 비트플레인수 (항상 1)
WORD biBitCount; // 픽셀당비트수 (1,4,8,16,24,32)
DWORD biCompression; // 압축유형 (BI_RGB)
DWORD biSizeImage; // 비트맵데이터의크기 (bytes)
LONG biXPelsPerMeter; // 수평해상도 (pixels/meter)
LONG biYPelsPerMeter; // 수직해상도 (pixels/meter)
DWORD biClrUsed; // LUT에포함된칼라 인덱스의개수
DWORD biClrImportant; // 비트맵을화면에출력하기위해
// 사용된칼라인덱스의개수
} BITMAPINFOHEADER;
![Page 6: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/6.jpg)
666
typedef struct tagRGBQUAD
{
BYTE rgbBlue; // B component
BYTE rgbGreen; // G component
BYTE rgbRed; // R component
BYTE rgbReserved1; // reserved
} RGBQUAD;
![Page 7: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/7.jpg)
777
gray-scale image
true color image
bfOffBits: 0x36
biWith: 0x96(150)
biHeight: 0x64(100)
biBitCount: 0x18(24)
biClrUsed: 0x00(0)
bfOffBits: 0x436
biWith: 0x96(150)
biHeight: 0x64(100)
biBitCount: 0x08(8)
biClrUsed: 0x00(0)
![Page 8: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/8.jpg)
888
![Page 9: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/9.jpg)
9
BMP 파일의 특징
A ···
1차원배열: data
A ⇒ data[12]
A
8
2차원배열: data
A ⇒ data[1][2]
10
[1*10+2]
(x, y) [width*y + x]
![Page 10: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/10.jpg)
101010
150 x 50 8bit gray-scale image (x, y) = (2, 1) ?
0149
150 303 304 455 456 7447 7448 7599∙∙∙152151
∙∙∙
(2, 1)
154
0 149 150 299 300 449 450 7349 7350 7499∙∙∙
∙∙∙
(2, 1)
152
[152] = [150*1 + 2]
각 행의 데이터는 4byte의 배수로 저장
(x, y) = (2, 1) [154] = [152*1 + 2]
(x, y) [widthStep*y + x]
![Page 11: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/11.jpg)
111111
widthStep
width widthStep = ((width + 3) / 4) * 4
(x, y) [widthStep*y + x]
width가 150인 8bit gray-scale image의경우
widthStep = ((150+3) / 4) * 4 = 38 * 4 = 152
![Page 12: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/12.jpg)
121212
Vertical Flip
(x, y) [widthStep*(height-y-1) + x]
0
height - 1
![Page 13: BMP 파일 처리 - elearning.kocw.netelearning.kocw.net/KOCW/document/2012/kumoh/kimseongyeong/03.pdf · 3. BMP . 파일의구조. File Header (BITMAPFILEHEADER) Bitmap Info. Header](https://reader030.vdocuments.net/reader030/viewer/2022040219/5e18470d8f8b245aea13e830/html5/thumbnails/13.jpg)
13
요약
BMP 파일의구조
Headers of BMP → File Header, Bitmap Info. Header, LUT
Image Data
BMP 파일의특징
한행의데이터는 4바이트의배수
상하반전된데이터
(x, y) [widthStep*(height-y-1) + x]