?? 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 + -