VC 6.0 이미지 처리 0 - bmp 파일 분석

/ / 제 가 방금 이미지 처 리 를 배 웠 을 때 Matlab 을 사 용 했 습 니 다. 나중에 VC 로 전 환 했 습 니 다. 처음에 본 책 은 모두 CDib 류 를 구축 하고 bmp 파일 을 처리 하 는 API 를 한 가지 유형 에 포 장 했 습 니 다. (지금 은 Microsoft 가 Dib 처리 함 수 를 MFC 에 밀봉 하지 않 은 것 이 일리 가 있 는 것 같 습 니 다) 그러나 구축 류 는 매우 복잡 해서 입문 하기 어렵 습 니 다.나중에 bmp 에 무엇이 있 는 지 알 게 된 후에 API 로 처리 하 는 것 이 상당히 편리 합 니 다 ~
/ / 이것 은 이미지 처리 의 매우 관건 적 인 단계 입 니 다. 여러분 은 반드시 명확 하 게 알 고 나중에 처리 할 때 뜻 대로 될 것 입 니 다 ~
- 1. BMP 파일 구성
- BMP 파일 은 파일 헤더, 비트 맵 정보 헤더, 색상 정보 와 그래 픽 데이터 네 부분 으로 구성 된다.
BMP 파일 헤더
- BMP 파일 헤더 데이터 구 조 는 BMP 파일 의 유형, 파일 크기 와 비트 맵 시작 위치 등 정 보 를 포함 합 니 다.
- 그 구조 정 의 는 다음 과 같다.
typedef struct tagBITMAPFILEHEADER
{
WORDbfType;   //        ,   BM
DWORD   bfSize;   //        ,      
WORDbfReserved1;  //        ,   0
WORDbfReserved2;  //        ,   0
DWORD   bfOffBits; //          ,      
//          ,      
} BITMAPFILEHEADER;

비트 맵 정보 헤더
BMP                   。
typedef struct tagBITMAPINFOHEADER{
   DWORD  biSize;   //          
   LONGbiWidth;  //      ,      
   LONGbiHeight; //      ,      
   WORD   biPlanes; //        ,   1
   WORD   biBitCount//          ,   1(  ),
  // 4(16 ),8(256 ) 24(   )  
   DWORD  biCompression;   //       ,    0(   ),
  // 1(BI_RLE8    ) 2(BI_RLE4    )  
   DWORD  biSizeImage; //      ,      
   LONGbiXPelsPerMeter; //        ,     
   LONGbiYPelsPerMeter;  //        ,     
   DWORD  biClrUsed;//                
   DWORD  biClrImportant;//              
} BITMAPINFOHEADER;

색깔 표
- 색상 표 는 비트 맵 의 색상 을 설명 하 는 데 사용 되 며, 표 항목 마다 RGBQUAD 형식의 구조 로 색상 을 정의 합 니 다.RGBQUAD 구조의 정 의 는 다음 과 같다.
typedef struct tagRGBQUAD {
BYTErgbBlue;//      (    0-255)
BYTErgbGreen;   //      (    0-255)
BYTErgbRed; //      (    0-255)
BYTErgbReserved;//   ,   0
} RGBQUAD;
    RGBQUAD        biBitCount   :
 biBitCount=1,4,8 ,   2,16,256   ;
 biBitCount=24 ,      。
                  ,BITMAPINFO      :
typedef struct tagBITMAPINFO {
   BITMAPINFOHEADER bmiHeader;   //      
   RGBQUAD  bmiColors[1];  //    
} BITMAPINFO;

비트 맵 데이터
- 비트 맵 데 이 터 는 비트 맵 의 모든 픽 셀 값 을 기록 합 니 다. 기록 순 서 는 스 캔 줄 에서 왼쪽 에서 오른쪽으로, 스 캔 줄 사 이 는 아래 에서 위로 입 니 다.비트 맵 의 픽 셀 값 이 차지 하 는 바이트 수:
 biBitCount=1 ,8    1   ;
 biBitCount=4 ,2    1   ;
 biBitCount=8 ,1    1   ;
 biBitCount=24 ,1    3   ;

Windows 는 스 캔 줄 이 차지 하 는 바이트 수 를 4 의 배수 (즉, long 단위) 로 규정 하고 부족 한 것 은 0 으로 채 워 야 합 니 다.
스 캔 줄 이 차지 하 는 바이트 수 계산 방법: DataSizePerLine = (biWidth * biBitCount + 31) / 8;
/ / 스 캔 줄 이 차지 하 는 바이트 수 DataSizePerLine = DataSizePerLine / 4 * 4; /바이트 수 는 반드시 4 의 배수 여야 한다.
비트 맵 데이터 의 크기 (압축 되 지 않 은 경우): DataSize = DataSizePerLine * biHeight;

좋은 웹페이지 즐겨찾기