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

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值