(二)ImageProcess软件学习--BmpFile.cpp之BmpFile.h中类的行为实现

一、CBmpFile类的构造函数CBmpFile::CBmpFile(),当创建一个CBmpFile类对象时候自动运行的。

CBmpFile::CBmpFile()

{
m_pImgDat=NULL; //BYTE*    m_pImgDat;   //指向图像数据的指针
m_Cols=m_Rows=m_PxlBytes =0;//行、列、像素赋初值
    m_pBmpInfo   = new BYTE[ sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256];//位图文件信息头的指针大小初始化。
    memset( m_pBmpInfo,0,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256 );
    RGBQUAD *pColorTab = (RGBQUAD *)(m_pBmpInfo+sizeof(BITMAPINFOHEADER));
for( int i=0;i<256;i++ )

pColorTab[i].rgbRed=pColorTab[i].rgbGreen=pColorTab[i].rgbBlue=i;//将pColorTab中的值初始化。
}
}

 

1、memset, 函数原型
void *memset(void *s, int ch, unsigned n); 

将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。该函数设置m_pBmpInfo指针指向的地址块大小为位图文件信息头大小,全部设为值0. 2、RGBQUAD RGBQUAD是一个结构体,定义如下: typedef struct tagRGBQUAD {

        BYTE    rgbBlue;
        BYTE    rgbGreen;
        BYTE    rgbRed;
        BYTE    rgbReserved;
} RGBQUAD;

        BYTE    rgbGreen;
        BYTE    rgbRed;
        BYTE    rgbReserved;
} RGBQUAD;
值得注意的是:RGBQUAD的颜色顺序是:B,G,R,Reserved(蓝绿红):RGBQUAD的颜色顺序是:B,G,R,Reserved(蓝绿红)
<span style="color:#ff0000">二、析构函数CBmpFile::~CBmpFile()</span>

CBmpFile::~CBmpFile()

if (m_pImgDat) 
delete []m_pImgDat; 
m_pImgDat=NULL; 
if( m_pBmpInfo ) 
delete []m_pBmpInfo; 
m_pBmpInfo=NULL; 
}

 

 

 

如果m_pImgDat定义了,不为空,则删除。m_pBmpInfo同理。作用为自动释放空间,在程序结束时候自动运行。

 

<span style="color:#ff0000">三、重载运算符[]函数BYTE* CBmpFile::operator[](int nIndex)</span>

BYTE* CBmpFile::operator[](int nIndex)

return (m_pImgDat+nIndex*m_Cols); 
}

 

 

 

使得该运算符[]具有使m_pImgDat再加上nIndex列的功能。

 

<span style="color:#ff0000">四、创建BmpFile函数	BOOL CBmpFile::CreateBmp(int cols,int rows,int pixelPytes)</span>

BOOL CBmpFile::CreateBmp(int cols,int rows,int pixelPytes)
{
if (m_pImgDat) 
delete []m_pImgDat; //如果m_pImgDat已经存在了,删除空间。
m_pImgDat = new BYTE[cols*rows*pixelPytes]; //给m_pImgDat创建空间大小为--行乘列乘像素大小
memset( m_pImgDat,0,cols*rows*pixelPytes ); //给m_pImgDat所指空间行乘列乘像素大小赋值0
m_Cols=cols;
m_Rows=rows;
m_PxlBytes=pixelPytes;
return TRUE;
}

 

 

 

<span style="color:#ff0000">五、重载运算符=函数	const CBmpFile& CBmpFile::operator=(CBmpFile& bmpFile)</span>

const CBmpFile& CBmpFile::operator=(CBmpFile& bmpFile)
{
CreateBmp( bmpFile.m_Cols,bmpFile.m_Rows,bmpFile.m_PxlBytes);
memcpy( m_pImgDat,bmpFile.m_pImgDat,m_Cols*m_Rows*m_PxlBytes );
memcpy( m_pBmpInfo,bmpFile.m_pBmpInfo,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256 );
return (*this); 

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值