?? ch1_1view.cpp
字號:
}void CCh1_1View::OnMorphClose() { //閉運算 // 獲取文檔 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色位圖的閉運算!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } int nMode; // 創建對話框 cDlgMorphClose dlgPara; // 初始化變量值 dlgPara.m_nMode = 0; // 顯示對話框,提示用戶設定閉運算方向 if (dlgPara.DoModal() != IDOK) { // 返回 return; } // 獲取用戶設定的閉運算方向 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 = ::FindDIBBits(lpDIB); // 調用CloseDIB()函數對DIB進行閉運算 if (CloseDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure)) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗或者圖像中含有0和255之外的像素值!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }void CCh1_1View::OnMorphDilation() { //膨脹運算 // 獲取文檔 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色位圖的膨脹!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } int nMode; // 創建對話框 cDlgMorphDilation dlgPara; // 初始化變量值 dlgPara.m_nMode = 0; // 顯示對話框,提示用戶設定膨脹方向 if (dlgPara.DoModal() != IDOK) { // 返回 return; } // 獲取用戶設定的膨脹方向 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 = ::FindDIBBits(lpDIB); // 調用DilationDIB()函數膨脹DIB if (DilationDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure)) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗或者圖像中含有0和255之外的像素值!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }//////////////////////////////////////////////////////////////////////////////////////// 邊緣與輪廓//void CCh1_1View::OnEdgeHough() { //Hough運算 // 獲取文檔 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色位圖的運算!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } // 更改光標形狀 BeginWaitCursor(); // 找到DIB圖像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 調用HoughDIB()函數對DIB if (HoughDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB))) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗或者圖像中含有0和255之外的像素值!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }void CCh1_1View::OnEdgeGauss() { //Gauss邊緣檢測運算 // 獲取文檔 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色位圖的運算!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } // 更改光標形狀 BeginWaitCursor(); // 找到DIB圖像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 調用GaussDIB()函數對DIB進行邊緣檢測 if (GaussDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB))) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }void CCh1_1View::OnEdgeKirsch() { //Kirsch邊緣檢測運算 // 獲取文檔 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色位圖的運算!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } // 更改光標形狀 BeginWaitCursor(); // 找到DIB圖像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 調用KirschDIB()函數對DIB進行邊緣檢測 if (KirschDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB))) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }void CCh1_1View::OnEdgePrewitt() { //Prewitt邊緣檢測運算 // 獲取文檔 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色位圖的運算!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } // 更改光標形狀 BeginWaitCursor(); // 找到DIB圖像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 調用PrewittDIB()函數對DIB進行邊緣檢測 if (PrewittDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB))) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }void CCh1_1View::OnEdgeRobert() { //Robert邊緣檢測運算 // 獲取文檔 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色位圖的運算!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } // 更改光標形狀 BeginWaitCursor(); // 找到DIB圖像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 調用RobertDIB()函數對DIB進行邊緣檢測 if (RobertDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB))) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }void CCh1_1View::OnEdgeSobel() { //Sobel邊緣檢測運算 // 獲取文檔 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色位圖的運算!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } // 更改光標形狀 BeginWaitCursor(); // 找到DIB圖像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 調用SobelDIB()函數對DIB進行邊緣檢測 if (SobelDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB))) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }void CCh1_1View::OnEdgeFill() { //種子填充運算 // 獲取文檔 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色位圖的運算!", "系統提示" , MB_ICONINFORMATION | MB_OK); // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 返回 return; } // 更改光標形狀 BeginWaitCursor(); // 找到DIB圖像象素起始位置 lpDIBBits = ::FindDIBBits(lpDIB); // 調用FillDIB()函數對DIB進行種子填充 if (FillDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB))) { // 設置臟標記 pDoc->SetModifiedFlag(TRUE); // 更新視圖 pDoc->UpdateAllViews(NULL); } else { // 提示用戶 MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK); } // 解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 恢復光標 EndWaitCursor(); }void CCh1_1View::OnEdgeContour() { //輪廓提取運算 // 獲取文檔 CCh1_1Doc* pDoc = GetDocument(); // 指向DIB的指針 LPSTR lpDIB; // 指向DIB象素指針 LPSTR lpDIBBits; // 鎖定DIB lpDIB = (LPSTR) ::GlobalLock
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -