(5) 于“Message Maps”选项页,在“Object IDs”列表框的最后选中“IDOK”,然后在“Messages”列表框中选中“BN_CLICKED”,双击,将建立起“确定”按钮对应的消息映射函数。
(6) 切换至“Member Variables”选项页,在“Control IDs”列表框中选中“IDC_EDIT_LIGHT_D”,双击,在Member Variables Name中输入“m_LightD”,在Cagetory中选中“Value”,在Variable type中选中“int”;点击OK。在Minimum Value中输入“-100”,在Maximum Value中输入“100”。点击“确定”按钮。
3. 建立菜单
切换到“ResourceView”选项页,展开“DIPJQ resources”,展开“Menu”,双击“IDR_MAINFRAME”,对菜单进行编辑。
双击最后的空白顶层菜单,在标明编辑框中输入“颜色处理”,选中“弹出”。将该菜单拖至“查看”之后。
点击菜单“颜色处理”,双击下部空白菜单项,打开“菜单项目 属性”对话框,在ID下拉列表框中输入“ID_PROC_LIGHT”,在标明编辑框中输入“调整亮度…”,在提示编辑框中输入“调整亮度\\n亮度”。关闭对话框。
4. 建立消息映射函数
在CDIPJQDoc类中建立“调整亮度”菜单项的消息映射函数:
点击菜单“查看—>建立类向导”,在“Class Name”下拉框中选中“CDIPJQDoc”,在“Object IDs”列表框中选中“ID_PROC_LIGHT”,然后在“Message”列表框中双击“COMMAND”。
5. 在消息映射函数中添加调用代码
打开DIPJQDoc.cpp文件,在文件首部已有的#include语句之后添加一行: #include \#include \#include \
在OnProcLight()函数中加入如下代码:
void CDIPJQDoc::OnProcLight() { // TODO: Add your command handler code here CDlgLight dlg; if( dlg.DoModal()==IDOK ) { LImageProc lip; lip.m_pSrcImg = m_pCurImage; lip.m_pDestImg = m_pLastImage; float d = dlg.m_LightD/100.0; if( lip.ModifyLight(d) ) { LImage *p = m_pCurImage; m_pCurImage = m_pLastImage; m_pLastImage = p; UpdateAllViews(NULL); SetPathName(\ \ } } }
注:在之后其它的消息映射函数中,加粗的三行代码将因处理功能的不同而改变,其它各行代码
则保持不变。
6. 组建程序,运行测试
组建执行文件,排除错误,对亮度调整功能进行运行测试。在对图像进行了一次亮度调整后,可点击工具栏上的撤消按钮,将图像恢复为处理前的状态。
(二) 对比度处理
1. 在图像处理类中实现对比度处理功能
在SDImageProc.h文件中加入对比度处理函数的定义:
在LImageProc.h文件中加入对比度处理函数的定义: BOOL ImageIsValid(); //源和目标图象是否有效 BOOL ModifyLight(float d); //亮度调整,-1~1
BOOL ModifyContrast(float d); //对比度调整,-1~1
在LImageProc.cpp文件的最后,添加对比度处理函数的实现代码,如下: BOOL LImageProc:: ModifyContrast(float d) //对比度调整,-1~1 { }
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;
//中间部分请参照前面的亮度处理函数自行写出 return TRUE;
2. 建立对比度对话框,用于对比度调整参数的的输入
建立对比度对话框。对话框ID设为“IDD_DIALOG_CONTRAST”,对话框标题设为“对比度调整参数”;编辑框的ID设为“IDD_EDIT_CONTRAST_D”;(Ctrl+w)对话框类的名称取为“CDlgContrast”;调整参数的变量名取为“m_ContrastD”。