dib.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 2k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // DIB.H
  3. //
  4. // Declaration of CDIB
  5. //
  6. // History:
  7. //
  8. // Author   Date        Description
  9. // ------   ----        -----------
  10. // jaym     02/03/97    Created
  11. /////////////////////////////////////////////////////////////////////////////
  12. #ifndef __DIB_H__
  13. #define __DIB_H__
  14. /////////////////////////////////////////////////////////////////////////////
  15. // Macros
  16. /////////////////////////////////////////////////////////////////////////////
  17. #define IS_WIN30_DIB(lpbi)      ((*(DWORD *)(pbi)) == sizeof(BITMAPINFOHEADER))
  18. #define QUAD_EQUAL(Q1, Q2)      ((Q1.rgbRed == Q2.rgbRed) && (Q1.rgbGreen == Q2.rgbGreen) && (Q1.rgbBlue == Q2.rgbBlue))
  19. #define DIB_WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)
  20.     // DIB_WIDTHBYTES performs DWORD-aligning of DIB scanlines.  The "bits"
  21.     // parameter is the bit count for the scanline (biWidth * biBitCount),
  22.     // and this macro returns the number of DWORD-aligned bytes needed 
  23.     // to hold those bits.
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CDIB
  26. /////////////////////////////////////////////////////////////////////////////
  27. class CDIB
  28. {
  29. // Construction/destruction
  30. public:
  31.     CDIB();
  32.     virtual ~CDIB();
  33. // Functions
  34.     BOOL LoadFromResource(HINSTANCE hInstance, WORD wResID);
  35.     void Draw(HDC hDC, RECT * prectSrc, RECT * prectDest);
  36.     DWORD Width()
  37.     { return ((m_pDIB == NULL) ? 0 : (((BITMAPINFOHEADER *) m_pDIB)->biWidth)); }
  38.     DWORD Height()
  39.     { return ((m_pDIB == NULL) ? 0 : (((BITMAPINFOHEADER *) m_pDIB)->biHeight)); }
  40. protected:
  41.     void *      GetResource(HINSTANCE hInstance, const char * pszDIBName);
  42.     DWORD       GetColorTableCount();
  43.     void *      GetBitsAddr();
  44.     DWORD       GetInfoHeaderSize()
  45.     { return ((m_pDIB == NULL) ? NULL : ((BITMAPINFOHEADER *) m_pDIB)->biSize); }
  46.     void *      GetColorTable()
  47.     {
  48.         return ((m_pDIB == NULL)
  49.                     ? NULL
  50.                     : (void *) (((BYTE *) m_pDIB) + GetInfoHeaderSize()));
  51.     }
  52.     HPALETTE    GetPalette();
  53.     void        Cleanup();
  54. // Data
  55. public:
  56.     void *      m_pDIB;
  57.     HPALETTE    m_hPalette;
  58. };
  59. #endif // __DIB_H__