?? ch1_1view.cpp
字號(hào):
// 初始化變量值
dlgPara.m_nMode = 0;
// 顯示對(duì)話框,提示用戶設(shè)定開運(yùn)算方向
if (dlgPara.DoModal() != IDOK)
{
// 返回
return;
}
// 獲取用戶設(shè)定的開運(yùn)算方向
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;
}
// 刪除對(duì)話框
delete dlgPara;
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用ErosionDIB()函數(shù)開運(yùn)算DIB
//if (OpenDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure))
if (OpenDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), nMode , structure))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用戶
MessageBox("分配內(nèi)存失敗或者圖像中含有0和255之外的像素值!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnMorphThining()
{
//閉運(yùn)算
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的閉運(yùn)算,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的細(xì)化運(yùn)算!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用ThiningDIB()函數(shù)對(duì)DIB進(jìn)行閉運(yùn)算
if (ThiningDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用戶
MessageBox("分配內(nèi)存失敗或者圖像中含有0和255之外的像素值!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnMorphClose()
{
//閉運(yùn)算
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的閉運(yùn)算,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的閉運(yùn)算!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
int nMode;
// 創(chuàng)建對(duì)話框
cDlgMorphClose dlgPara;
// 初始化變量值
dlgPara.m_nMode = 0;
// 顯示對(duì)話框,提示用戶設(shè)定閉運(yùn)算方向
if (dlgPara.DoModal() != IDOK)
{
// 返回
return;
}
// 獲取用戶設(shè)定的閉運(yùn)算方向
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;
}
// 刪除對(duì)話框
delete dlgPara;
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用CloseDIB()函數(shù)對(duì)DIB進(jìn)行閉運(yùn)算
if (CloseDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用戶
MessageBox("分配內(nèi)存失敗或者圖像中含有0和255之外的像素值!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnMorphDilation()
{
//膨脹運(yùn)算
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的膨脹,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的膨脹!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
int nMode;
// 創(chuàng)建對(duì)話框
cDlgMorphDilation dlgPara;
// 初始化變量值
dlgPara.m_nMode = 0;
// 顯示對(duì)話框,提示用戶設(shè)定膨脹方向
if (dlgPara.DoModal() != IDOK)
{
// 返回
return;
}
// 獲取用戶設(shè)定的膨脹方向
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;
}
// 刪除對(duì)話框
delete dlgPara;
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用DilationDIB()函數(shù)膨脹DIB
if (DilationDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用戶
MessageBox("分配內(nèi)存失敗或者圖像中含有0和255之外的像素值!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
//////////////////////////////////////////////////////////////////////////////////////
// 邊緣與輪廓
//
void CCh1_1View::OnEdgeHough()
{
//Hough運(yùn)算
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的Hough變換,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的運(yùn)算!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用HoughDIB()函數(shù)對(duì)DIB
if (HoughDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB)))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用戶
MessageBox("分配內(nèi)存失敗或者圖像中含有0和255之外的像素值!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnEdgeGauss()
{
//Gauss邊緣檢測(cè)運(yùn)算
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的邊緣檢測(cè),其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的運(yùn)算!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用GaussDIB()函數(shù)對(duì)DIB進(jìn)行邊緣檢測(cè)
if (GaussDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用戶
MessageBox("分配內(nèi)存失敗!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnEdgeKirsch()
{
//Kirsch邊緣檢測(cè)運(yùn)算
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的邊緣檢測(cè),其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的運(yùn)算!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用KirschDIB()函數(shù)對(duì)DIB進(jìn)行邊緣檢測(cè)
if (KirschDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用戶
MessageBox("分配內(nèi)存失敗!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnEdgePrewitt()
{
//Prewitt邊緣檢測(cè)運(yùn)算
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的邊緣檢測(cè),其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的運(yùn)算!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用PrewittDIB()函數(shù)對(duì)DIB進(jìn)行邊緣檢測(cè)
if (PrewittDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
}
else
{
// 提示用戶
MessageBox("分配內(nèi)存失敗!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
}
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnEdgeRobert()
{
//Robert邊緣檢測(cè)運(yùn)算
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的邊緣檢測(cè),其它的可以類推)
/* if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的運(yùn)算!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
*/
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用RobertDIB()函數(shù)對(duì)DIB進(jìn)行邊緣檢測(cè)
if (RobertDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))
{
// 設(shè)置臟標(biāo)記
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -