더북(TheBook)

지금까지 설명한 다양한 DIB 관련 기능 외에도 IppDib 멤버 변수의 값을 반환하는 public 멤버 함수들도 정의할 필요가 있다. IppDib 멤버 변수들은 모두 private로 선언되었기 때문에 public으로 선언된 정보 제공 함수가 필요하다. 아래 함수들은 IppDib 클래스 정의 안에 직접 구현되어 있다.

LONG         GetWidth()          const { return m_nWidth; }
• LONG         GetHeight()         const { return m_nHeight; }
• WORD         GetBitCount()       const { return m_nBitCount; }
• DWORD        GetDibSize()        const { return m_nDibSize; }
• LPBITMAPINFO GetBitmapInfoAddr() const { return (LPBITMAPINFO)m_pDib; }
• BOOL         IsValid()           const { return (m_pDib != NULL); }

m_nWidth, m_nHeight, m_nBitCount, m_nDibSize 등의 멤버 변수 값들은 각각 GetWidth, GetHeight, GetBitCount, GetDibSize 함수를 통하여 알아낼 수 있다. m_pDib 멤버 변수는 특별히 BITMAPINFO 구조체의 포인터 타입으로 반환하도록 GetBitmapInfoAddr 함수를 정의하였다. IsValid 함수는 현재 DIB 객체가 실제로 구성되어 있는지를 확인해주는 함수이다. 위 함수들은 멤버 변수의 값을 참조만 할 뿐, 값 자체를 변경시키지 않으므로 함수 선언 뒤에 const 지시자를 붙여 안전하게 보호하였다.

이 외에도 DIB 구조에서 참조가 필요한 값들을 반환하는 함수들도 있다.

BYTE* GetDIBitsAddr() const;
• int GetPaletteNums() const;

GetDIBitsAddr 함수는 DIB 구조에서 픽셀 데이터의 시작 주소를 반환하는 함수이다. 픽셀 데이터 시작 주소는 비트맵을 화면에 출력하는 함수에서 필요로 하며, 추후 구현할 IppDibIppImage 클래스 상호 변환 시에도 필요로 한다. GetPaletteNums 함수는 m_nBitCount 값을 참조하여 색상 테이블에서 사용되는 RGBQUAD 구조체 배열의 크기를 반환한다. 트루컬러 비트맵인 경우는 0을 반환하고, 그레이스케일 비트맵은 256을 반환한다. GetDIBitsAddrGetPaletteNums 함수 구현은 소스 4-8을 참고하라.

소스 4-8 IppDib 클래스 - 비트맵 정보 반환 함수(IppDib.cpp)
BYTE* IppDib::GetDIBitsAddr() const
{
    if (m_pDib == NULL)
        return NULL;

    LPBITMAPINFOHEADER lpbmi = (LPBITMAPINFOHEADER)m_pDib;
    return ((BYTE*)m_pDib + lpbmi->biSize + (sizeof(RGBQUAD) * GetPaletteNums()));
}

int IppDib::GetPaletteNums() const
{
    switch (m_nBitCount)
    {
    case 1:  return 2;
    case 4:  return 16;
    case 8:  return 256;
    default: return 0;
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.