1.4.4 面向对象的DIB的读写及访问——ImgCenterDib类(1)
上一节我们用面向过程的方式实现了图像的可视化编程(www.cppentry.com),本节我们从另一个全新的角度——面向对象的方式实现图像的可视化编程(www.cppentry.com)。但是MFC中没有封装DIB类,我们可以自己完成。我们声明的类叫ImgCenterDib(Image Center DIB,取图像处理中心编写的DIB之意),里面封装了DIB位图处理所需要的基本的成员变量和成员函数。我们在后续章节的算法实现中都是以该类作为基类来派生的,这样既充分利用了面向对象程序设计的封装、继承等特性,又使得代码易于维护和移植。
1.ImgCenterDib类的定义
ImgCenterDib类的定义在头文件“ImageCenterDib.h”中,以下是该类的完整定义。
class ImgCenterDib //图像颜色表指针 //每像素占的位数
//图像信息头指针 //调色板句柄 //颜色表长度 public: //不带参数的构造函数 //带参数的构造函数 //析构函数 //DIB读函数
//DIB显示函数 //逻辑调色板生成函数 //获取DIB的尺寸(宽、高) //清理空间 //用新的数据替换当前DIB //计算颜色表的长度 protected: //图像的宽,像素为单位 //图像的高,像素为单位 |
在该类的实现中,可以通过BMP文件读取的方式生成DIB,也可以通过参数传递的方式生成DIB,无论哪种方式,该类都是一次性为DIB的指针m_lpDib分配内存,这与1.4.3节对BMP文件的可视化编程(www.cppentry.com)(读写及访问)方式是一致的。
ImgCenterDib类的代码实现在文件“ImgCenterDib.cpp”中,下面分别讲述该类各成员函数的代码实现。
2.构造函数和析构函数
类的构造函数用来完成数据成员的初始化工作,系统在创建类的对象时自动调用构造函数。类的析构函数用来释放被分配的内存空间,当类的对象消失时系统自动调用该函数。以下是ImgCenterDib构造函数和析构函数的代码实现。
/**************************************** m_lpDib=NULL;//初始化m_lpDib为空 m_lpColorTable=NULL;//颜色表指针为空 m_pImgData=NULL; //图像数据指针为空 m_lpBmpInfoHead=NULL; //图像信息头指针为空 m_hPalette = NULL;//调色板为空 /**************************************** //为图像的宽、高、每像素位数等成员变量赋值 //根据每像素位数,计算颜色表长度 //每行像素所占字节数,必须扩展成4的倍数 //位图数据缓冲区的大小(图像大小) //为m_lpDib一次性分配内存,生成DIB结构 //填写BITMAPINFOHEADER结构 //调色板句柄初始化为空,有颜色表时,MakePalette() //颜色表拷贝 //创建逻辑调色板 //用m_pImgData指向DIB位图数据起始位置 //拷贝图像数据进DIB位图数据区 /************************************** * //如果有调色板,释放调色板缓冲区 } |
/************************************** //如果DIB为空,则返回0 //如果DIB有调色板 //实现调色板 //设置位图伸缩模式 //将DIB在pDC所指向的设备上进行显示 //恢复旧的调色板 //函数返回 |
【责任编辑:夏书 TEL:(010)68476606】
| 回书目 上一节 下一节 |