Computer/ETC Updated: 2013. 5. 7. 16:44 hwaya.

DIB

반응형

DIB

현재 시스템의 디스플레이 등록 정보와 독립적으로 색상을 표현하는 비트맵을 장치 독립적인 비트맵, 즉 DIB(Device Independent Bitmap)라고 합니다. 일반적으로 JPEG, GIF, TIF, PCX, BMP등 그래픽 포멧으로 파일에 저장되어 있는 비트맵은 모두 DIB 입니다.

따라서, 이미지를 파일로부터 읽어오거나, 파일에 저장하기 위해서는 DIB를 사용해야 합니다.


파일 포멧과 메모리 포멧

비트맵 데이터는 데이터량이 많기 때문에 대부분의 파일 포멧이 데이터를 압축하여 저장하고 있습니다.


비트맵을 저장하는 여러가지 파일 포멧중 가장 간단한 것이 BMP파일입니다. BMP 파일은 윈도우에서 사용하는 표준 DIB 파일 포멧입니다.


DDB를 화면에 출력시키기 위해서는 CBitmap 클래스에 비트맵을 로드하고, BitBit함수를 호출하면 되듯이, DIB를 화면에 출력시키기 위해서는 DIB 포멧에 맞추어 메모리에 로드한 후 SetDIBitsToDevice 함수를 호출하면 됩니다. SetDiBitsToDevice 함수를 호출하기 위한 메모리포멧은 BMP 파일 포멧에서 BITMAPFILEHEADER를 제거한 것과 같습니다.


따라서, BMP 파일을 읽어 화면에 출력 하려면, BITMAPFILEHEADER를 뺀 나머지 부분을 그대로 읽어 메모리에 로드하고, SetDIBitsToDevice 함수를 호출하면 됩니다. BMP 파일 외의 다른 포멧으로 저장되어 있는 비트맵 파일들을 화면에 출력하려면 역시 이형식으로 변환해야 합니다.





DIB() - 장치에 독립적인 비트맵


파일헤드 (BITMAPFILEHEADER)


typedef struct tagBITMAPFILEHEADER 

{

WORD bfType;            // - bfType : 비트맵파일인지 확인 (비트맵이라면. 반드시 BM (0x42,0x4d) )

DWORD bfSize;          // - bfSize : 비트맵 파일의 크기

WORD bfReserved1;   // - bfReserved1 : 예약되어 있는 값, 보통 0

WORD bfReserved2;   // - bfReserved2 : 예약되어 있는 값, 보통 0

DWORD bfOffBits;       // 실제 비트맵 데이터 값과 헤더의 오프셋 값 ( BITMAPFILEHEADER  + BITMAPINFO )

} BITMAPFILEHEADER;


영상헤드 (BITMAPINFOHEADER)


typedef struct tag BITMAPINFOHEADER

{

DWORD biSize;              // - biSize : BITMAPINFOHEADER 구조체의 크기

LONG biWidth;               // - biWidth : 비트맵의 가로픽셀의 수

LONG biHeight;              // - biHeight : 비트맵의 세로픽셀의 수

WORD biPlanes;            // - biPlanes : 장치에 있는 색상면의 개수 (반드시 1)

WORD biBitCount;           // - biBitCount : 한 픽셀을 표현할 수 있는 비트의 수

DWORD biCompression;  // - biCompression : 압축상태를 지정 

                                    //   (BI_RGB : 압축되지 않은 비트맵,BI_RLE8 : 8bit압축 ,BI_RLE4 : 4bit압축 )

DWORD biSizeImage;      // - biSizeImage : 실제 이미지의 바이트크기 (압축되지 않은경우 0 )

LONG biXPelsPerMeter;  // - biXPelsPerMeter : 미터당 가로픽셀수

LONG biYPelsPerMeter;  // - biYPelsPerMeter : 미터당 세로픽셀수

DWORD biClrUsed;         // - biClrUsed  : 색상테이블의 색상중 실제 비트맵에서 사용되는 색상수

                                   // (0 : 비트맵은 사용할 수 있는 모든색상을 사용 

                                   // , 그외 : RGBQUAD구조체배열의 크기는 이 멤버의 크기만큼 만들어짐)

DWORD biClrImportant;  // - iClrImportant : 비트맵을 출력하는데 필수적인 색상수 (0 : 모든 색상이 사용되어야함)

} BITMAPINFOHEADER;


팔레트정보 (RGBQURD)


typedef struct tag RGBQUAD 
{
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;

} RGBQUAD; 


영상데이터 (거꾸로 들어있음)


DIB파일은 다음과 같은 구조로 이루어져 있습니다.

1. 파일자체의 정보를 가지고 있는 파일헤드 (BITMAPFILEHEADER)

2. 비트맵 영상에 대한 크기나, 흑백, 컬러정보, 팔레트크기정보 등을 저장하기 위한 영상헤드 (BITMAPINFOHEADER)

3. 인덱스에 의한 컬러값을 저장하기 위한 팔레트정보 (RGBQURD)

4. 이미지데이터 (거꾸로 들어있음)

반응형

'Computer > ETC' 카테고리의 다른 글

Thread(스레드)  (0) 2014.03.27
항목4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자  (0) 2014.03.20
운영체제의 개요  (0) 2014.03.12
회선  (0) 2013.05.07
포인트 처리_XOR연산, 룩업테이블  (0) 2013.05.07
블러링 & 샤프닝  (0) 2013.05.07
RGB 변환 YCbCr  (0) 2013.05.07
시작 해 볼까?  (0) 2011.07.09

Table of Contents


    EIGHTBOX
    EIGHTBOX
    hwaya.

    programmer

    🍋일상의 소소한 순간들부터 큰 꿈까지, 호기심을 만족시킬 다양한 카테고리를 담은 블로그 입니다. 그리고, 소소한 행동에 감동하며 기뻐하고 하루하루에 감사하는 사람🌵

    Today Yesterday Total
    최신글