3. 编写类实现代码
在SDImageProc.cpp中添加如下类实现代码:
#include \
SDImageProc: SDImageProc() { m_pSrcImg = m_pDestImg = NULL; }
SDImageProc::~ SDImageProc() { }
BOOL SDImageProc::ImageIsValid() { if( m_pSrcImg==NULL || m_pDestImg==NULL ) return FALSE; return m_pSrcImg->IsValid(); }
说明:各图像处理函数均将在该类中定义并实现,每添加一个图像处理函数,都应首先在SDImageProc.h文件中加入函数定义代码,然后在SDImageProc.cpp文件中编写函数实现代码。
第七节 实现颜色处理功能
(一) 亮度处理
1. 在图像处理类中实现亮度处理功能
在SDImageProc类中添加并实现亮度处理函数。
首先打开SDImageProc.h文件,在其中加入亮度处理函数的定义,如下: class SDImageProc {
public: SDImageProc(); virtual ~SDImageProc(); class SDImage *m_pSrcImg,*m_pDestImg; BOOL ImageIsValid(); //源和目标图象是否有效 BOOL ModifyLight(float d); //亮度调整,-1~1
};
#endif
// !defined(AFX_SDMAGEPROC_H__CA6A65DD_DBE3_4D8F_AE45_FD6611866EE3__INCLUDED_)
再打开SDImageProc.cpp文件,在最后添加亮度处理函数的实现代码,如下:
BOOL SDmageProc::ModifyLight(float d) { if( !ImageIsValid() ) return FALSE; m_pDestImg->Create(m_pSrcImg->m_Width, m_pSrcImg->m_Height); BYTE *sd = m_pSrcImg->m_pBits; BYTE *dd = m_pDestImg->m_pBits; if(d>1) d=1; if(d<-1) d=-1; d=1+d; int i,v; BYTE colMap[256]; for(i=0;i<256;i++) { v=(INT)(i*d+0.5); if( v>255 ) v=255; colMap[i]=(BYTE)v; } for(i=0;i
***注:
(1) 以上函数中加粗的5行代码,是在后面所要实现的各图像处理函数中都需要固定写出的代码。前4行总是写在函数开始处,后1行总是写在函数结尾处。
(2) 在所有的图像处理函数中,处理得到的图像都是写入新的图像数据块中,原图像数据块的指针总是sd,新图像数据块的指针总是dd。
(3) 在编程中所需用到的图像参数变量为:
原图像的宽度:pSrcImg->m_Width;原图像的高度:pSrcImg->m_Height;原图像每行字节数:pSrcImg->m_WidthBytes;原图像数据总字节数:pSrcImg->m_ImageSize。
新图像的宽度:pDestImg->m_Width;新图像的高度:pDestImg->m_Height;新图像每行字节数:pDestImg->m_WidthBytes;新图像数据总字节数:pDestImg->m_ImageSize。
2. 建立亮度对话框,用于亮度调整参数的输入
(1) 切换到“ResourceView”选项页,展开“DIPJQ Resources”,在“Dialog”上点击右键,选中“插入Dialog”,将新建并编辑一个对话框。
(2) 右键点击对话框上的空白处,选中“属性”,在ID中输入“IDD_DIALOG_LIGHT”,在标题中输入“亮度调整参数”,点击字体按钮,将字体设为Tahoma,字体大小设为10。
(3) 添加、调整对话框上的控件至下图所示状态:
在控件工具栏上按下“静态文本”选择按钮,在对话框的适当位置拉出一个静态文本控件,在控件上点击右键—>属性,ID不变,标题输入为“亮度调整比例系数:”;添加编辑框,ID输入为“IDC_EDIT_LIGHT_D”。编辑完成后,点击保存按钮。
(4) 点击VC菜单“查看—>建立类向导”;选中“Create a new class”,点击OK;在Name编辑框中输入“CDlgLight”,点击OK,将建立CDlgLight类,并打开“MFC Class Wizard”对话框。