#ifndef __DIB_H
#define __DIB_H
//
// CDIB -
// CDibDC -
//
// Implements a simple encapsulation of a DIB section and a DC.
//
//
//
//
// CDIB
//
// É豸ÎÞ¹ØÎ»Í¼Àà(°æ±¾1.0)
//
// Íê³É¹¦ÄÜ:
// É豸ÎÞ¹ØÎ»Í¼µÄ´´½¨,ÏÔʾ,¶ÁÈë,±£´æ,²¶×½Î»Í¼
//
// °æ±¾ËùÓÐ: ÂÞöÁ,ÔøÖ¾
//
//
class CDIB;
class CDibDC;
class CDIB : public CGdiObject
{
DECLARE_DYNAMIC(CDIB)
public:
//Óɾä±ú´´½¨Î»Í¼
static CDIB* PASCAL FromHandle(HBITMAP hBitmap);
// Constructors
CDIB();
//´´½¨Î»Í¼
BOOL CreateDIB(int nWidth, int nHeight, UINT nBitcount, const void* lpBits=NULL);
//´´½¨Î»Í¼
BOOL CreateDIBIndirect(LPBITMAPINFO lpBitmap, const void* lpBits=NULL);
//²¶×½´°¿ÚͼÏñ
BOOL CaptureDIB(CWnd * pWnd, const CRect& capRect = CRect(0,0,0,0));
// Attributes
//µÃµ½Î»Í¼
operator HBITMAP() const;
//¿½±´Î»Í¼
CDIB& operator = (CDIB& copy);
// Operations
//ÉèÖÃͼÏñÊý¾Ý
DWORD SetDIBBits(DWORD dwCount, const void* lpBits);
//µÃµ½Í¼ÏñÊý¾Ý
LPVOID GetDIBBits(DWORD dwCount = 0, LPVOID lpBits = NULL);
// Implementation
public:
virtual ~CDIB();
#ifdef _DEBUG
virtual void Dump(CDumpContext& dc) const;
#endif
// Newly added functions
public:
//µÃµ½Ê¹ÓõÄÑÕÉ«Êý
int GetColorUsed();
//¶ÁÈëλͼ
int LoadBmp(LPCSTR filename);
//±£´æÎ»Í¼
int SaveBmp(LPCSTR filename);
//ÉèÖõ÷É«°å
void SetPalette(UINT uStartIndex, UINT cEntries, CONST RGBQUAD *pColors);
//ÉèÖõ÷É«°å
void SetPalette(CPalette* pPal);
//µÃµ½É豸
CDC* GetDC(void);
//ÊÍ·ÅÉ豸
static BOOL ReleaseDC(CDC *pdc);
//µÃµ½Î»Í¼
int GetBitmap(BITMAP* pBitMap);
//µÃµ½DibSection
int GetDibSection(DIBSECTION* pDibSection);
//µÃµ½¿í¶È
int GetWidth();
//µÃµ½¸ß¶È
int GetHeight();
//µÃµ½³ß´ç
SIZE GetSize();
//µÃµ½Ã¿ÐÐͼÏñ×Ö½ÚÊý
int GetWidthBytes();
//µÃµ½Í¼ÏñλÊý
int GetBitCount();
//µÃµ½Í¼ÏñÊý¾Ý
LPVOID GetBits();
//µÃµ½Í¼ÏñÐÅϢͷ
LPBITMAPINFO GetBitmapInfo(void);
};
// inline functions
//
//
// GetBitmap(BITMAP* pBitMap)
//
// Íê³É¹¦ÄÜ:
// µÃµ½Î»Í¼
//
// ÊäÈë²ÎÊý:
// λͼָÕë pBitMap
//
// ·µ»Ø²ÎÊý:
// ÊÇ·ñ³É¹¦
//
//
//µÃµ½Î»Í¼
inline int CDIB::GetBitmap(BITMAP* pBitMap)
{
return(::GetObject(m_hObject, sizeof(BITMAP), pBitMap));
}
//
//
// GetDibSection(DIBSECTION *pDibSection)
//
// Íê³É¹¦ÄÜ:
// µÃµ½DibSection
//
// ÊäÈë²ÎÊý:
// DibSectionÖ¸Õë pDibSection
//
// ·µ»Ø²ÎÊý:
// ÊÇ·ñ³É¹¦
//
//
//µÃµ½DibSection
inline int CDIB::GetDibSection(DIBSECTION *pDibSection)
{
return(::GetObject(m_hObject, sizeof(DIBSECTION), pDibSection));
}
//
//
// HBITMAP()
//
// Íê³É¹¦ÄÜ:
// µÃµ½Î»Í¼¾ä±ú
//
// ÊäÈë²ÎÊý:
// ÎÞ
//
// ·µ»Ø²ÎÊý:
// λͼ¾ä±ú
//
//
//µÃµ½Î»Í¼¾ä±ú
inline CDIB::operator HBITMAP() const
{
return (HBITMAP)(this == NULL ? NULL : m_hObject);
}
//
//
// FromHandle(HBITMAP hDib)
//
// Íê³É¹¦ÄÜ:
// ´Óλͼ¾ä±úµÃµ½Î»Í¼Àà
//
// ÊäÈë²ÎÊý:
// λͼ¾ä±ú hDib
//
// ·µ»Ø²ÎÊý:
// λͼÀà
//
//
//´Óλͼ¾ä±úµÃµ½Î»Í¼Àà
inline CDIB* PASCAL CDIB::FromHandle(HBITMAP hDib)
{
return((CDIB*)CGdiObject::FromHandle(hDib));
}
//
//
// GetWidth(void)
//
// Íê³É¹¦ÄÜ:
// µÃµ½¿í¶È
//
// ÊäÈë²ÎÊý:
// ÎÞ
//
// ·µ»Ø²ÎÊý:
// ¿í¶È
//
//
//µÃµ½¿í¶È
inline int CDIB::GetWidth(void)
{
BITMAP bmp;
GetBitmap(&bmp);
return(bmp.bmWidth);
}
//
//
// GetHeight(void)
//
// Íê³É¹¦ÄÜ:
// µÃµ½¸ß¶È
//
// ÊäÈë²ÎÊý:
// ÎÞ
//
// ·µ»Ø²ÎÊý:
// ¸ß¶È
//
//
//µÃµ½¸ß¶È
inline int CDIB::GetHeight(void)
{
BITMAP bmp;
GetBitmap(&bmp);
return(bmp.bmHeight);
}
//
//
// GetSize(void)
//
// Íê³É¹¦ÄÜ:
// µÃµ½³ß´ç
//
// ÊäÈë²ÎÊý:
// ÎÞ
//
// ·µ»Ø²ÎÊý:
// ³ß´ç
//
//
//µÃµ½³ß´ç
inline SIZE CDIB::GetSize(void)
{
BITMAP bmp;
GetBitmap(&bmp);
CSize size(bmp.bmWidth, bmp.bmHeight);
return(size);
}
//
//
// GetWidthBytes(void)
//
// Íê³É¹¦ÄÜ:
// µÃµ½Ã¿ÐÐ×Ö½ÚÊý
//
// ÊäÈë²ÎÊý:
// ÎÞ
//
// ·µ»Ø²ÎÊý:
// ÿÐÐ×Ö½ÚÊý
//
//
//µÃµ½Ã¿ÐÐ×Ö½ÚÊý
inline int CDIB::GetWidthBytes(void)
{
BITMAP bmp;
GetBitmap(&bmp);
return(bmp.bmWidthBytes);
}
//
//
// GetBitCount(void)
//
// Íê³É¹¦ÄÜ:
// µÃµ½Í¼ÏñλÊý
//
// ÊäÈë²ÎÊý:
// ÎÞ
//
// ·µ»Ø²ÎÊý:
// ͼÏñλÊý
//
//
//µÃµ½Í¼ÏñλÊý
inline int CDIB::GetBitCount(void)
{
BITMAP bmp;
GetBitmap(&bmp);
return(bmp.bmBitsPixel);
}
//
//
// GetBits(void)
//
// Íê³É¹¦ÄÜ:
// µÃµ½Í¼ÏñÊý¾Ý
//
// ÊäÈë²ÎÊý:
// ÎÞ
//
// ·µ»Ø²ÎÊý:
// ͼÏñÊý¾Ý
//
//
//µÃµ½Í¼ÏñÊý¾Ý
inline LPVOID CDIB::GetBits(void)
{
BITMAP bmp;
GetBitmap(&bmp);
return(bmp.bmBits);
}
//
//
//
// CDibDC
//
// É豸ÎÞ¹ØÎ»Í¼É豸Àà(°æ±¾1.0)
//
// Íê³É¹¦ÄÜ:
// ÓëÉ豸ÎÞ¹ØÎ»Í¼µÄÏà¹ØÁª
//
// °æ±¾ËùÓÐ: ÂÞöÁ,ÔøÖ¾
//
//
class CDibDC : public CDC
{
DECLARE_DYNAMIC(CDibDC)
// Constructors
public:
CDibDC();
// Attributes
protected:
HBITMAP m_hOld;
// Implementation
public:
CPalette * GetPalette();
virtual ~CDibDC();
friend class CDIB;
};
#endif //__DIB_H