?? earview.cpp
字號:
// 顯示對話框,提示用戶設定平移量
if (dlgPara.DoModal() != IDOK)
{
return;
}
// 獲取用戶設定的平移量
fA = dlgPara.m_fA;
fB = dlgPara.m_fB;
delete dlgPara;
BeginWaitCursor();
// 調用LinerTrans()函數進行線性變換
pDoc->GetDibImage()->LinerTrans(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), fA, fB);
pDoc->SetModifiedFlag(TRUE); // 設置臟標記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnPointThre()
{
// TODO: Add your command handler code here
// 閾值變換
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
CPointThreDlg dlgPara; // 參數對話框
BYTE bThre; // 閾值
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的閾值變換,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的閾值變換!", "系統提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
dlgPara.m_bThre = 128;
// 顯示對話框,提示用戶設定閾值
if (dlgPara.DoModal() != IDOK)
{
return;
}
bThre = dlgPara.m_bThre;
delete dlgPara;
BeginWaitCursor();
// 調用ThresholdTrans()函數進行閾值變換
pDoc->GetDibImage()->ThresholdTrans(lpDIBBits,
pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), bThre);
pDoc->SetModifiedFlag(TRUE); // 設置臟標記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnPointWind()
{
// TODO: Add your command handler code here
// 窗口變換
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
CPointWinDlg dlgPara; // 創建對話框
BYTE bLow; // 窗口下限
BYTE bUp; // 窗口上限
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的窗口變換,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的窗口變換!", "系統提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
dlgPara.m_bLow = 0;
dlgPara.m_bUp = 255;
// 顯示對話框,提示用戶設定窗口上下限
if (dlgPara.DoModal() != IDOK)
{
return;
}
bLow = dlgPara.m_bLow;
bUp = dlgPara.m_bUp;
delete dlgPara;
BeginWaitCursor();
// 調用WindowTrans()函數進行窗口變換
pDoc->GetDibImage()->WindowTrans(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), bLow, bUp);
pDoc->SetModifiedFlag(TRUE); // 設置臟標記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnPointStre()
{
// TODO: Add your command handler code here
// 灰度拉伸
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
CPointStreDlg dlgPara; // 創建對話框
BYTE bX1,bY1; // 點1坐標
BYTE bX2,bY2; // 點2坐標
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的灰度拉伸,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的灰度拉伸!", "系統提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
dlgPara.m_bX1 = 50;
dlgPara.m_bY1 = 30;
dlgPara.m_bX2 = 200;
dlgPara.m_bY2 = 220;
// 顯示對話框,提示用戶設定拉伸位置
if (dlgPara.DoModal() != IDOK)
{
return;
}
bX1 = dlgPara.m_bX1;
bY1 = dlgPara.m_bY1;
bX2 = dlgPara.m_bX2;
bY2 = dlgPara.m_bY2;
delete dlgPara;
BeginWaitCursor();
// 調用GrayStretch()函數進行灰度拉伸
pDoc->GetDibImage()->GrayStretch(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), bX1, bY1, bX2, bY2);
pDoc->SetModifiedFlag(TRUE); // 設置臟標記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnPointEqua()
{
// TODO: Add your command handler code here
// 灰度均衡
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的直方圖均衡,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的直方圖均衡!", "系統提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
BeginWaitCursor();
// 調用InteEqualize()函數進行直方圖均衡
pDoc->GetDibImage()->InteEqualize(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB));
pDoc->SetModifiedFlag(TRUE); // 設置臟標記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnEnhaSmooth()
{
// TODO: Add your command handler code here
// 圖像平滑
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
int iTempH; // 模板高度
int iTempW; // 模板寬度
FLOAT fTempC; // 模板系數
int iTempMX; // 模板中心元素X坐標
int iTempMY; // 模板中心元素Y坐標
FLOAT aValue[25]; // 模板元素數組
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的平滑,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的平滑!", "系統提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
CSmoothDlg dlgPara;
// 給模板數組賦初值(為平均模板)
aValue[0] = 1.0;
aValue[1] = 1.0;
aValue[2] = 1.0;
aValue[3] = 0.0;
aValue[4] = 0.0;
aValue[5] = 1.0;
aValue[6] = 1.0;
aValue[7] = 1.0;
aValue[8] = 0.0;
aValue[9] = 0.0;
aValue[10] = 1.0;
aValue[11] = 1.0;
aValue[12] = 1.0;
aValue[13] = 0.0;
aValue[14] = 0.0;
aValue[15] = 0.0;
aValue[16] = 0.0;
aValue[17] = 0.0;
aValue[18] = 0.0;
aValue[19] = 0.0;
aValue[20] = 0.0;
aValue[21] = 0.0;
aValue[22] = 0.0;
aValue[23] = 0.0;
aValue[24] = 0.0;
dlgPara.m_intType = 0;
dlgPara.m_iTempH = 3;
dlgPara.m_iTempW = 3;
dlgPara.m_iTempMX = 1;
dlgPara.m_iTempMY = 1;
dlgPara.m_fTempC = (FLOAT) (1.0 / 9.0);
dlgPara.m_fpArray = aValue;
// 顯示對話框,提示用戶設定平移量
if (dlgPara.DoModal() != IDOK)
{
return;
}
iTempH = dlgPara.m_iTempH;
iTempW = dlgPara.m_iTempW;
iTempMX = dlgPara.m_iTempMX;
iTempMY = dlgPara.m_iTempMY;
fTempC = dlgPara.m_fTempC;
delete dlgPara;
BeginWaitCursor();
// 調用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::OnEnhaMidianF()
{
// TODO: Add your command handler code here
// 中值濾波
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
int iFilterH; // 濾波器的高度
int iFilterW; // 濾波器的寬度
int iFilterMX; // 中心元素的X坐標
int iFilterMY; // 中心元素的Y坐標
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的中值濾波,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的中值濾波!", "系統提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
CMidFilterDlg dlgPara;
dlgPara.m_iFilterType = 0;
dlgPara.m_iFilterH = 3;
dlgPara.m_iFilterW = 1;
dlgPara.m_iFilterMX = 0;
dlgPara.m_iFilterMY = 1;
// 顯示對話框,提示用戶設定平移量
if (dlgPara.DoModal() != IDOK)
{
return;
}
iFilterH = dlgPara.m_iFilterH;
iFilterW = dlgPara.m_iFilterW;
iFilterMX = dlgPara.m_iFilterMX;
iFilterMY = dlgPara.m_iFilterMY;
delete dlgPara;
BeginWaitCursor();
// 調用MedianFilter()函數中值濾波
if (pDoc->GetDibImage()->MedianFilter(lpDIBBits,
pDoc->GetDibImage()->DIBWidth(lpDIB), pDoc->GetDibImage()->
DIBHeight(lpDIB), iFilterH, iFilterW, iFilterMX, iFilterMY))
{
pDoc->SetModifiedFlag(TRUE); // 設置臟標記
pDoc->UpdateAllViews(NULL); // 更新視圖
}
else
{
MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CEARView::OnEnhaGradsharp()
{
// TODO: Add your command handler code here
// 梯度銳化
// 獲取文檔
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB()); // 鎖定DIB
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的梯度銳化,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的梯度銳化!", "系統提示" ,
MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
BYTE bThre; // 閾值
CSharpThreDlg dlgPara; // 創建對話框
// 初始化變量值
dlgPara.m_bThre = 10;
// 提示用戶輸入閾值
if (dlgPara.DoModal() != IDOK)
{
return;
}
bThre = dlgPara.m_bThre; // 獲取用戶的設定
delete dlgPara; // 刪除對話框
BeginWaitCursor(); // 更改光標形狀
// 調用GradSharp()函數進行梯度板銳化
if (pDoc->GetDibImage()->GradSharp(lpDIBBits,
pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), bThre))
{
pDoc->SetModifiedFlag(TRUE); // 設置臟標記
pDoc->UpdateAllViews(NULL); // 更新視圖
}
else
{
MessageBox("分配內存失敗!", "系統提示" , MB_ICONINFORMATION | MB_OK);
}
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); // 解除鎖定
EndWaitCursor(); // 恢復光標
}
void CEARView::OnEnhaSharp()
{
// TODO: Add your command handler code here
// 圖像拉普拉斯銳化
// 獲取文檔
CEARDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
int iTempH; // 模板高度
int iTempW; // 模板寬度
FLOAT fTempC; // 模板系數
int iTempMX; // 模板中心元素X坐標
int iTempMY; // 模板中心元素Y坐標
FLOAT aValue[9]; // 模板元素數組
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的銳化,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -