Download presentation
Presentation is loading. Please wait.
1
BMP(Bit Map)
2
1. BMP 디바이스에 독립적인 영상파일을 저장하는 표준규격
JPEG, GIF, BMP, TIFF, PCX, PGM 등이 존재 보통 영상데이터는 정보량이 크기 때문에 압축을 통해 작은 크기로 변환하여 저장한다. BMP파일 포맷은 압축을 수행하지 않으며 헤드가 있는 여러 형식의 파일 중에서 구조가 가장 간단하다.
3
2. Bitmap데이터 형식 Window환경에서 프로그래밍을 하는 경우 다른 환경에서 프로그래밍을 하는 경우
windows.h 헤더파일에 정의 다른 환경에서 프로그래밍을 하는 경우 다음과 같이 헤더파일에 직접 정의
4
(1) File Header (비트맵 파일에 대한 정보)
파일 헤더 BITMAPFILEHEAER라는 구조체에 정의 사용자는 단지 구조체 변수를 선언해서 사용만 하면 된다. 현재의 파일 포맷이 정말 BMP인지에 대한 정보 BMP파일의 확장자 : *.BMP로 정의 다른 파일이 XX.BMP라고 썼을 수 있으므로, BMP디코더가 이를 분석 세가지 분석방법이 존재.
5
(1) File Header (비트맵 파일에 대한 정보)
typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; WORD는 2바이트, DWORD는 4바이트
6
(1) File Header (비트맵 파일에 대한 정보)
변수 각각의 기능을 살펴보면 다음과 같다. bfType : 비트맵 파일인지 아닌지를 확인하기 위한 변수 BM이라는 캐릭터 형이 저장되어있습니다. bfSize : 바이트단위로 전체파일 크기 파일의 전체 크기를 표시합니다. bfReserved1, bfReserved2 : 사용하지 않습니다. 0값. bfOffBits : 실질 데이터(pixel)의 시작좌표를 나타냅니다.
7
(1) File Header (비트맵 파일에 대한 정보)
1. 파일의 첫 2바이트가 BM으로 시작하는가. 2. 바이트 단위의 정확한 파일크기와 헤더내의 bfSize가 있어야할 값과 일치하는가. 3. bfReserved1과 bfReserved2가 있어야 할 위치에 0값이 있는가. 세가지를 모두 체크, bmp파일 여부를 판명 디코더의 크기를 줄이기 위해, 첫 번째것만 체크하는 경우 파일의 헤더의 역할 포맷의 명확성을 표시 파일 내에 있어서 실질 데이터(pixel data)의 주소값을 나타내줍니다. 다시말해, 실질데이터의 파일내 위치를 정의해 주는 역할 bfOffBits에서 설정되어있음
8
(2) Image Header ("영상자체"에 대한 정보)
비트맵 영상에 대한 크기나 흑백/컬러정보, 팔레트 크기정보 등을 저장하기 위하여 파일헤드 바로 다음에 위치하는 구조체 변수 역할 이미지의 비트 수와 크기, 차원, 그리고 압축여부를 알려주는 역할 즉, 이미지 자체의 정보를 갖고 있다.
9
typedef struct tagBITMAPINFOHEADER
{ DWORD biSize; // 이 구조체의 크기 LONG biWidth; // 픽셀단위로 영상의 폭 LONG biHeitht; // 영상의 높이 WORD biplanes; // 비트 플레인 수(항상 1) WORD biBitCount; //픽셀당 비트 수(컬러, 흑백 구별) DWORD biCompression; // 압축유무 DWORD biSizeImage; // 영상의 크기(바이트단위) LONG biXPelsPerMeter; // 가로해상도 LONG biYPelsPerMeter; // 세로해상도 DWORD biClrUsed; //실제 사용 색상수(팔레트의 크기) DWORD biClrImportant; // 주로 사용되는 컬러 수 } BITMAPINFOHEADER;
10
(3) Pallete 팔레트는 인덱스에 의한 컬러값을 저장하기 위한 구조체.
이 구조체를 사용하여 팔레트의 수 만큼 배열을 할당하여 저장. 256컬러모드의 영상은 팔레트의배열 크기가 256개 16비트 컬러영상은 팔레트 크기가 2의 16승개이다. biClrUsed변수를 참조하면 된다.
11
(3) Pallete tydef struct tagRGBQUAD { BYTE rgbBlue; //파란색 값
BYTE rgbGreen; //녹색 값 BYTE rgbRed; //빨간색 값 BYTE rgbReserved; //항상 0 }RGBQUAD;
12
3. 주의 사항 (1) 이미지는 거꾸로 저장됨 실제로 비트맵 영상이 저장될 때는 이미지가 거꾸로 저장
윈도우 : 좌표 (0,0)은 좌측 상단의 처음을 의미 BITMAP : 좌표 (0,0)은 좌측 상단이 아닌 좌측 하단의 처음 이미지 데이터가 위에서 아래가 아닌 아래에서 위로 즉 뒤집혀서 저장
13
3. 주의 사항 (1) 이미지는 거꾸로 저장됨 따라서, 비트맵에서 영상데이터를 나중에 영상처리를 위해 사용할 배열로 다시 저장할 때는 거꾸로 반전시켜 저장
14
3. 주의 사항 (2) 영상 가로길이는 4바이트의 배수 비트맵은 메모리 저장시, 가로줄의 크기는 항상 4바이트의 배수가 되어야 한다. 이유 비디오 메모리는 4의 배수의 체계 그림이란 것이 우리가 눈으로 보는 것처럼 가로(width), 세로(height)의 큰 사각형처럼 저장되어 있는 것이 아님 선형 즉 연속적인 데이터로 저장되어 있어서 이것을 화면에 출력해 주기 위해서는 가로(width) 크기에 맞게 끊어서 출력
15
3. 주의 사항 (2) 영상 가로길이는 4바이트의 배수 원본 그림(가로 15바이트)
16
3. 주의 사항 (2) 영상 가로길이는 4바이트의 배수 그림출력(4의 배수 미적용 )
비디오 메모리는 4의 배수 체계 때문에 15바이트가 아니라 16바이트 먼저 15바이트의 빨간색을 출력한 후에 다음 라인으로 이동해서 노란색을 출력해야 하지만, 가로(width) 총 바이트 수는 15바이트뿐 이기 때문에 잘못된 위치에 출력
17
3. 주의 사항 (2) 영상 가로길이는 4바이트의 배수 그림 출력(4의 배수 적용)
4의 배수를 적용해 가로(width)의 총 바이트 크기를 15가 아닌 16바이트로 해 주었기 때문에 화면에 제대로 된 그림이 출력
18
3. 주의 사항 (2) 영상 가로길이는 4바이트의 배수 24비트 BMP 저장(Save) 4의 배수 미적용 4의 배수 적용
19
3. 주의 사항 (2) 영상 가로길이는 4바이트의 배수 24비트 BMP 로드(Load) 4의 배수 적용 4의 배수 미적용
20
3. 주의 사항 (2) 영상 가로길이는 4바이트의 배수 BMP로 저장할 영상 데이터의 실제크기
78 * 60 가로픽셀 78은 4의 배수가 아니므로 80으로 만든다. 실제 저장되는 메모리는 80*60픽셀의 크기가 된다.
Similar presentations