Page History: RAW file and BMP file
Compare Page Revisions
Page Revision: 2010/08/09 11:57
BMP format
파일 헤드의 구조체
Typedef struct tagBITMAPFILEHEADER
{
WORD bfType; // ”BM”이라는 값을 저장
DWORD bfSize; // Byte단위의 전체파일 크기
WORD bfReserved1; // 예약된 변수
WORD bfReserved1; // 예약된 변수
DWORD bfOffBits; // 영상 데이터까지의 거리
} BITMAPFILEHEADER;
영상 헤드의 구조체
Typedef struct tagBITMAPINFOHEADER
{
DWORD biSize; // 구조체의 크기
LONG biWidth; // 픽셀 단위의 영상 폭
LONG biHeight; // 영상의 높이
WORD biPlanes; // 비트 플레인 수(항상 1)
WORD biBitCount; // 픽셀당 비트 수
DWORD biCompression; // 압축 여부
DWORD biSizeImage; // 영상의 크기(바이트 단위)
LONG biXPelsPerMeter; // 가로 해상도
LONG biYPelsPerMeter; // 세로 해상도
DWORD biClrUsed; // 실제 사용 색상 수
DWORD biClrImportant; // 중요한 색상 인덱스
} BITMAPINFOHEADER;
Palette의 구조체
Typedef struct tagRGBQUAD
{
BYTE rgbBlue; // 파란색
BYTE rgbGreen; // 녹색
BYTE rgbRed; // 빨강색
BYTE rgbReserved; // 예약된 변수
} RGBQUAD;
RGBQUAD hRGB[256];
이미지 반전
for (i=0; i<biHeight; i++) {
for (j=0; j<biWidth; j++) {
GrayImg[i*biWidth+j] = lpMem[(biHeight-i-1)*rwsize+j];
}
}
- 가로 줄의 길이는 항상 4Byte의 배수가 되어야 함
#define WIDTHBYTES(bits) (((bits)+31)/32*4) // 4Byte 배수로 변환
rwsize = WIDTHBYTES(biBitCount*biWidth); // 호출시