我想自己写一个CDIB类,从CObject类继承而来.
class CDIB : public CObject
{
DECLARE_SERIAL(CDIB);
public:
virtual void Serialize(CArchive &ar);
virtual BOOL DrawDib(CDC *pDC,int xDest,int yDest);//ÏÔʾλͼ
BOOL CloseFile();//¹Ø±ÕλͼÎļþ
//´´½¨ÐµÄλͼÎļþ£¬¸ù¾Ý²ÎÊýwidth,height,nBitCounts·ÖÅäÄÚ´æ¿Õ¼ä
BOOL Create(int width, int height, int nBitCounts);
CDIB();
virtual ~CDIB();
CDIB(int width, int height, int nBitCounts);
BOOL ReadFile(CFile* pFile);//´ÓBMPÎļþÖжÁÈëDIBÐÅÏ¢
//´ÓBMPÎļþÖжÁÈëDIBÐÅÏ¢,ÓëReadFile²»Í¬µÄÊÇʹÓÃCreateSection´´½¨Î»Í¼Î»
BOOL ReadSection(CFile* pFile, CDC* pDC = NULL);
//½«DIBдÈëÎļþ£¬±£´æ³ÉBMPͼƬ¸ñʽ
BOOL WriteFile(CFile* pFile);
BITMAPINFO* GetBitmapInfoAddress()
{return m_pBMI;}
BYTE* GetBitsAddress()
{return m_pDIBits;}
RGBQUAD* GetClrTabAdress()
{
return (LPRGBQUAD)(((BYTE*)(m_pBMI))+sizeof(BITMAPINFOHEADER));
}
protected:
void FreeStuff();
BITMAPINFO* m_pBMI;//
BYTE* m_pDIBits;//Ö¸ÏòÊý¾Ýλ
private:
int DibHeight(){return m_pBMI->bmiHeader.biHeight;}
int DibWidth(){return m_pBMI->bmiHeader.biWidth;}
};
CDIB::CDIB()
{
m_pBMI=NULL;
m_pDIBits=NULL;
}
CDIB::CDIB(int width, int height, int nBitCounts)
{
}
CDIB::~CDIB()
{
FreeStuff();
}
BOOL CDIB::ReadFile(CFile *pFile)
{
}
BOOL CDIB::ReadSection(CFile *pFile, CDC *pDC)
{
}
BOOL CDIB::WriteFile(CFile *pFile)
{
}
BOOL CDIB::Create(int width, int height, int nBitCounts)
{
}
BOOL CDIB::CloseFile()
{
}
BOOL CDIB::DrawDib(CDC *pDC,int xDest,int yDest)
{
::StretchDIBits(pDC->GetSafeHdc(),
xDest,
yDest,
m_DestSize.cx,
m_DestSize.cy,
0,
0,
DibWidth(),
DibHeight(),
m_pDIBits,
(LPBITMAPINFO) m_pBMI,
DIB_RGB_COLORS,
SRCCOPY);
}
void CDIB::Serialize(CArchive &ar)
{
}
void CDIB::FreeStuff()
{
//Çå³ý³ÉÔ±±äÁ¿Ö¸ÏòµÄÄÚ´æ,ÊÍ·ÅÄÚ´æ
if(m_pBMI!=NULL) free(m_pBMI);
if(m_pDIBits!=NULL) free(m_pDIBits);
}