DIB.inl
上传用户:royluo
上传日期:2007-01-05
资源大小:1584k
文件大小:5k
源码类别:

游戏

开发平台:

Visual C++

  1. /*****************************************************************************
  2. *                                                                             
  3. *   Dib.inl
  4. *                                                                             
  5. *   Electrical Engineering Faculty - Software Lab                             
  6. *   Spring semester 1998                                                      
  7. *                                                                             
  8. *   Tanks game                                                                
  9. *                                                                             
  10. *   Contents: Inline functions implementations.
  11. *                                                                             
  12. *   Authors: Eran Yariv - 28484475                                           
  13. *            Moshe Zur  - 24070856                                           
  14. *                                                                            
  15. *                                                                            
  16. *   Date: 23/09/98                                                           
  17. *                                                                            
  18. ******************************************************************************/
  19. /*************************************************************************
  20.  *
  21.  * IsValid()
  22.  *
  23.  * Return Value:
  24.  *
  25.  * BOOL            - Is the DIB initialized?
  26.  *
  27.  * Description:
  28.  *
  29.  * This function test for a valid DIB. Invalid DIBs cannot be used
  30.  *
  31.  ************************************************************************/
  32. inline BOOL CDIB::IsValid() const 
  33.     return (m_pBMI != NULL); 
  34. }
  35. /*************************************************************************
  36.  *
  37.  * Invalidate()
  38.  *
  39.  * Return Value:
  40.  *
  41.  * void
  42.  *
  43.  * Description:
  44.  *
  45.  * Invalidates a DIB - makes it unusable.
  46.  *
  47.  ************************************************************************/
  48. inline void CDIB::Invalidate() 
  49.     Free();
  50. }
  51. /*************************************************************************
  52.  *
  53.  * FindPixel()
  54.  *
  55.  * Return Value:
  56.  *
  57.  * PPIXEL            - Pixel pointer into bytes structure
  58.  *
  59.  * Description:
  60.  *
  61.  * This function returns the correct pixel in the bitmap structure
  62.  * at a given point.
  63.  *
  64.  ************************************************************************/
  65. inline PPIXEL CDIB::FindPixel (UINT x, UINT y)       const
  66. {
  67.     return PPIXEL(&m_pBits[x + y * WIDTHBYTES((m_pBMI->bmiHeader.biWidth) << 3)]);
  68. }
  69. inline CDIB::CDIB()
  70. {
  71.     m_pBMI = NULL;
  72.     m_pBits = NULL;
  73.     m_pPalette = NULL;
  74. }
  75. inline CDIB::~CDIB()
  76. {
  77.     Free();
  78. }
  79. /*************************************************************************
  80.  *
  81.  * Width()
  82.  *
  83.  * Return Value:
  84.  *
  85.  * DWORD            - width of the DIB
  86.  *
  87.  * Description:
  88.  *
  89.  * This function gets the width of the DIB from the BITMAPINFOHEADER
  90.  * width field 
  91.  *
  92.  ************************************************************************/
  93. inline DWORD CDIB::Width() const
  94. {
  95.     if (!m_pBMI)
  96.         return 0;
  97.     /* return the DIB width */
  98.     return m_pBMI->bmiHeader.biWidth;
  99. }
  100. /*************************************************************************
  101.  *
  102.  * Height()
  103.  *
  104.  * Return Value:
  105.  *
  106.  * DWORD            - height of the DIB
  107.  *
  108.  * Description:
  109.  *
  110.  * This function gets the height of the DIB from the BITMAPINFOHEADER
  111.  * height field 
  112.  *
  113.  ************************************************************************/
  114. inline DWORD CDIB::Height() const
  115. {
  116.     if (!m_pBMI)
  117.         return 0;
  118.     
  119.     /* return the DIB height */
  120.     return m_pBMI->bmiHeader.biHeight;
  121. }
  122. /*************************************************************************
  123.  *
  124.  * Size()
  125.  *
  126.  * Return Value:
  127.  *
  128.  * CSize            - Size of the DIB
  129.  *
  130.  * Description:
  131.  *
  132.  * This function gets the size of the DIB from the BITMAPINFOHEADER
  133.  * height and width field 
  134.  *
  135.  ************************************************************************/
  136. inline CSize CDIB::Size() const
  137. {
  138.     return CSize (Width(), Height());
  139. }
  140. /*************************************************************************
  141.  *
  142.  * PaletteSize()
  143.  *
  144.  * Return Value:
  145.  *
  146.  * WORD             - size of the color palette of the DIB
  147.  *
  148.  * Description:
  149.  *
  150.  * This function gets the size required to store the DIB's palette by
  151.  * multiplying the number of colors by the size of an RGBQUAD 
  152.  *
  153.  ************************************************************************/
  154. inline WORD CDIB::PaletteSize() const
  155. {
  156.     if (!m_pBMI)
  157.         return 0;
  158.     return WORD(NumColors() * sizeof(RGBQUAD));
  159. }
  160. inline PIXEL & CDIB::ColorAt (UINT uX, UINT uY)
  161. {
  162.     ASSERT (uX < Width());
  163.     ASSERT (uY < Height());
  164.     ASSERT (NumColors() <= 256);
  165.     return *FindPixel(uX, uY);
  166. }
  167. #ifdef _DEBUG
  168. inline void CDIB::Dump(CDumpContext& dc) const
  169. {
  170.     CObject::Dump(dc);
  171. }
  172. #endif