dibh

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值