现在的位置: 首页 > 综合 > 正文

要想学好位图的读写和显示,还是得自己亲手写一个CDIB类

2013年10月17日 ⁄ 综合 ⁄ 共 1727字 ⁄ 字号 评论关闭

我想自己写一个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);

}

抱歉!评论已关闭.