📄 earview.cpp
字号:
{
MessageBox("目前只支持256色位图的锐化!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
BeginWaitCursor();
// 设置拉普拉斯模板参数
iTempW = 3;
iTempH = 3;
fTempC = 1.0;
iTempMX = 1;
iTempMY = 1;
aValue[0] = -1.0;
aValue[1] = -1.0;
aValue[2] = -1.0;
aValue[3] = -1.0;
aValue[4] = 9.0;
aValue[5] = -1.0;
aValue[6] = -1.0;
aValue[7] = -1.0;
aValue[8] = -1.0;
// 调用Template()函数用拉普拉斯模板锐化DIB
if (pDoc->GetDibImage()->Template(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), iTempH, iTempW, iTempMX,
iTempMY, aValue, fTempC))
{
pDoc->SetModifiedFlag(TRUE); // 设置脏标记
pDoc->UpdateAllViews(NULL); // 更新视图
}
else
{
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnMorphErosion()
{
// TODO: Add your command handler code here
//腐蚀运算
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB象素指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的腐蚀,其它的可以类推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位图的腐蚀!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
CMorphErosionDlg dlgPara;
dlgPara.m_nMode = 0;
// 显示对话框,提示用户设定腐蚀方向
if (dlgPara.DoModal() != IDOK)
{
return;
}
// 获取用户设定的腐蚀方向
int nMode;
nMode = dlgPara.m_nMode;
int structure[3][3];
if (nMode == 2)
{
structure[0][0]=dlgPara.m_nStructure1;
structure[0][1]=dlgPara.m_nStructure2;
structure[0][2]=dlgPara.m_nStructure3;
structure[1][0]=dlgPara.m_nStructure4;
structure[1][1]=dlgPara.m_nStructure5;
structure[1][2]=dlgPara.m_nStructure6;
structure[2][0]=dlgPara.m_nStructure7;
structure[2][1]=dlgPara.m_nStructure8;
structure[2][2]=dlgPara.m_nStructure9;
}
delete dlgPara;
BeginWaitCursor();
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 调用ErosionDIB()函数腐蚀DIB
if (pDoc->GetDibImage()->ErosionDIB(lpDIBBits,
WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8),
pDoc->GetDibImage()->DIBHeight(lpDIB), nMode , structure))
{
pDoc->SetModifiedFlag(TRUE); // 设置脏标记
pDoc->UpdateAllViews(NULL); // 更新视图
}
else
{
MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnMorphDilation()
{
// TODO: Add your command handler code here
//膨胀运算
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB象素指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的膨胀,其它的可以类推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位图的膨胀!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
CMorphDilationDlg dlgPara;
dlgPara.m_nMode = 0;
// 显示对话框,提示用户设定膨胀方向
if (dlgPara.DoModal() != IDOK)
{
return;
}
// 获取用户设定的膨胀方向
int nMode;
nMode = dlgPara.m_nMode;
int structure[3][3];
if (nMode == 2)
{
structure[0][0]=dlgPara.m_nStructure1;
structure[0][1]=dlgPara.m_nStructure2;
structure[0][2]=dlgPara.m_nStructure3;
structure[1][0]=dlgPara.m_nStructure4;
structure[1][1]=dlgPara.m_nStructure5;
structure[1][2]=dlgPara.m_nStructure6;
structure[2][0]=dlgPara.m_nStructure7;
structure[2][1]=dlgPara.m_nStructure8;
structure[2][2]=dlgPara.m_nStructure9;
}
delete dlgPara;
BeginWaitCursor();
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 调用DilationDIB()函数膨胀DIB
if (pDoc->GetDibImage()->DilationDIB(lpDIBBits,
WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8),
pDoc->GetDibImage()->DIBHeight(lpDIB), nMode , structure))
{
pDoc->SetModifiedFlag(TRUE); // 设置脏标记
pDoc->UpdateAllViews(NULL); // 更新视图
}
else
{
MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnMorphOpen()
{
// TODO: Add your command handler code here
//开运算
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB象素指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的开运算,其它的可以类推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位图的开运算!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
CMorphOpenDlg dlgPara;
dlgPara.m_nMode = 0;
// 显示对话框,提示用户设定开运算方向
if (dlgPara.DoModal() != IDOK)
{
return;
}
// 获取用户设定的开运算方向
int nMode;
nMode = dlgPara.m_nMode;
int structure[3][3];
if (nMode == 2)
{
structure[0][0]=dlgPara.m_nStructure1;
structure[0][1]=dlgPara.m_nStructure2;
structure[0][2]=dlgPara.m_nStructure3;
structure[1][0]=dlgPara.m_nStructure4;
structure[1][1]=dlgPara.m_nStructure5;
structure[1][2]=dlgPara.m_nStructure6;
structure[2][0]=dlgPara.m_nStructure7;
structure[2][1]=dlgPara.m_nStructure8;
structure[2][2]=dlgPara.m_nStructure9;
}
delete dlgPara;
BeginWaitCursor();
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 调用ErosionDIB()函数开运算DIB
if (pDoc->GetDibImage()->OpenDIB(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), nMode , structure))
{
pDoc->SetModifiedFlag(TRUE); // 设置脏标记
pDoc->UpdateAllViews(NULL); // 更新视图
}
else
{
MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnMorphClose()
{
// TODO: Add your command handler code here
//闭运算
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB象素指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的闭运算,其它的可以类推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位图的闭运算!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
CMorphCloseDlg dlgPara;
dlgPara.m_nMode = 0;
// 显示对话框,提示用户设定闭运算方向
if (dlgPara.DoModal() != IDOK)
{
return;
}
// 获取用户设定的闭运算方向
int nMode;
nMode = dlgPara.m_nMode;
int structure[3][3];
if (nMode == 2)
{
structure[0][0]=dlgPara.m_nStructure1;
structure[0][1]=dlgPara.m_nStructure2;
structure[0][2]=dlgPara.m_nStructure3;
structure[1][0]=dlgPara.m_nStructure4;
structure[1][1]=dlgPara.m_nStructure5;
structure[1][2]=dlgPara.m_nStructure6;
structure[2][0]=dlgPara.m_nStructure7;
structure[2][1]=dlgPara.m_nStructure8;
structure[2][2]=dlgPara.m_nStructure9;
}
delete dlgPara;
BeginWaitCursor();
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 调用CloseDIB()函数对DIB进行闭运算
if (pDoc->GetDibImage()->CloseDIB(lpDIBBits,
WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8),
pDoc->GetDibImage()->DIBHeight(lpDIB), nMode , structure))
{
pDoc->SetModifiedFlag(TRUE); // 设置脏标记
pDoc->UpdateAllViews(NULL); // 更新视图
}
else
{
MessageBox("分配内存失败或者图像中含有0和255之外的像素值!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnEdgeSobel()
{
// TODO: Add your command handler code here
//Sobel边缘检测运算
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB象素指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位图的运算!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
BeginWaitCursor();
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 调用SobelDIB()函数对DIB进行边缘检测
if (pDoc->GetDibImage()->SobelDIB(lpDIBBits,
WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8),
pDoc->GetDibImage()->DIBHeight(lpDIB)))
{
pDoc->SetModifiedFlag(TRUE); // 设置脏标记
pDoc->UpdateAllViews(NULL); // 更新视图
}
else
{
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnEdgeKirsch()
{
// TODO: Add your command handler code here
//Kirsch边缘检测运算
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB象素指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的边缘检测,其它的可以类推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位图的运算!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
BeginWaitCursor();
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 调用KirschDIB()函数对DIB进行边缘检测
if (pDoc->GetDibImage()->KirschDIB(lpDIBBits,
WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8),
pDoc->GetDibImage()->DIBHeight(lpDIB)))
{
pDoc->SetModifiedFlag(TRUE); // 设置脏标记
pDoc->UpdateAllViews(NULL); // 更新视图
}
else
{
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnEdgeContour()
{
// TODO: Add your command handler code here
//轮廓提取运算
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB象素指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的轮廓提取,其它的可以类推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位图的运算!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
BeginWaitCursor();
// 找到DIB图像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 调用FillDIB()函数对DIB进行轮廓提取
if (pDoc->GetDibImage()->ContourDIB(lpDIBBits,
WIDTHBYTES(pDoc->GetDibImage()->DIBWidth(lpDIB) * 8),
pDoc->GetDibImage()->DIBHeight(lpDIB)))
{
pDoc->SetModifiedFlag(TRUE); // 设置脏标记
pDoc->UpdateAllViews(NULL); // 更新视图
}
else
{
MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -