?? linetransview.cpp
字號:
void CLineTransView::OnPointInvert()
{
// 圖像反色
CLineTransDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
FLOAT fA; // 線性變換的斜率
FLOAT fB; // 線性變換的截距
// 反色操作的線性變換的方程是-x + 255
fA = -1.0;
fB = 255.0;
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的反色,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的反色!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
BeginWaitCursor();
// 調(diào)用LinerTrans()函數(shù)反色
pDoc->GetDibImage()->LinerTrans(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), fA, fB);
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CLineTransView::OnPointLiner()
{
// 線性變換
CLineTransDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
CLinerParaDlg dlgPara; // 創(chuàng)建對話框
FLOAT fA; // 線性變換的斜率
FLOAT fB; // 線性變換的截距
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的線性變換,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的線性變換!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
dlgPara.m_fA = 2.0;
dlgPara.m_fB = -128.0;
// 顯示對話框,提示用戶設(shè)定平移量
if (dlgPara.DoModal() != IDOK)
{
return;
}
// 獲取用戶設(shè)定的平移量
fA = dlgPara.m_fA;
fB = dlgPara.m_fB;
delete dlgPara;
BeginWaitCursor();
// 調(diào)用LinerTrans()函數(shù)進行線性變換
pDoc->GetDibImage()->LinerTrans(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), fA, fB);
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CLineTransView::OnPointStre()
{
// 灰度拉伸
CLineTransDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
CPointStreDlg dlgPara; // 創(chuàng)建對話框
BYTE bX1,bY1; // 點1坐標(biāo)
BYTE bX2,bY2; // 點2坐標(biāo)
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的灰度拉伸,其它的可以類推)
if (pDoc->GetDibImage()->DIBNumColors(lpDIB) != 256)
{
MessageBox("目前只支持256色位圖的灰度拉伸!", "系統(tǒng)提示" ,
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;
// 顯示對話框,提示用戶設(shè)定拉伸位置
if (dlgPara.DoModal() != IDOK)
{
return;
}
bX1 = dlgPara.m_bX1;
bY1 = dlgPara.m_bY1;
bX2 = dlgPara.m_bX2;
bY2 = dlgPara.m_bY2;
delete dlgPara;
BeginWaitCursor();
// 調(diào)用GrayStretch()函數(shù)進行灰度拉伸
pDoc->GetDibImage()->GrayStretch(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), bX1, bY1, bX2, bY2);
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CLineTransView::OnPointThre()
{
// 閾值變換
CLineTransDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
CPointThreDlg dlgPara; // 參數(shù)對話框
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色位圖的閾值變換!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
dlgPara.m_bThre = 128;
// 顯示對話框,提示用戶設(shè)定閾值
if (dlgPara.DoModal() != IDOK)
{
return;
}
bThre = dlgPara.m_bThre;
delete dlgPara;
BeginWaitCursor();
// 調(diào)用ThresholdTrans()函數(shù)進行閾值變換
pDoc->GetDibImage()->ThresholdTrans(lpDIBBits,
pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), bThre);
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CLineTransView::OnPointWind()
{
// 窗口變換
CLineTransDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指針
LPSTR lpDIBBits; // 指向DIB象素指針
CPointWinDlg dlgPara; // 創(chuàng)建對話框
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色位圖的窗口變換!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
dlgPara.m_bLow = 0;
dlgPara.m_bUp = 255;
// 顯示對話框,提示用戶設(shè)定窗口上下限
if (dlgPara.DoModal() != IDOK)
{
return;
}
bLow = dlgPara.m_bLow;
bUp = dlgPara.m_bUp;
delete dlgPara;
BeginWaitCursor();
// 調(diào)用WindowTrans()函數(shù)進行窗口變換
pDoc->GetDibImage()->WindowTrans(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB), bLow, bUp);
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
EndWaitCursor();
}
void CLineTransView::OnChangetogray()
{
// TODO: Add your command handler code here
CLineTransDoc* pDoc = GetDocument();
//LPSTR lpDIB; // 指向DIB的指針
// LPSTR lpDIBBits; // 指向DIB象素指針
// CPointStreDlg dlgPara; // 創(chuàng)建對話框
/*lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);*/
pDoc->GetDibImage()->Convert256toGray(pDoc->GetHDIB());
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
/* ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());*/
}
void CLineTransView::OnBicolour()
{
// TODO: Add your command handler code here
CLineTransDoc* 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色位圖的二值化!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
// 調(diào)用Bicolour函數(shù)進行二值化
pDoc->GetDibImage()->Bicolour(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),
pDoc->GetDibImage()->DIBHeight(lpDIB));
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
}
void CLineTransView::OnDenoise()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
CLineTransDoc* 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色位圖的去離散噪聲!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
// 調(diào)用WindowTrans()函數(shù)進行窗口變換
pDoc->GetDibImage()->RemoveScatterNoise(pDoc->GetHDIB());
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
}
void CLineTransView::OnRuihua()
{
// TODO: Add your command handler code here
CLineTransDoc* 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色位圖的二值化!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
// 調(diào)用WindowTrans()函數(shù)進行窗口變換
pDoc->GetDibImage()->GradientSharp(pDoc->GetHDIB());
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
}
void CLineTransView::OnSlopeadjust()
{
// TODO: Add your command handler code here
CLineTransDoc* 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色位圖的二值化!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
return;
}
// 調(diào)用WindowTrans()函數(shù)進行窗口變換
pDoc->GetDibImage()->SlopeAdjust(pDoc->GetHDIB());
pDoc->SetModifiedFlag(TRUE); // 設(shè)置臟標(biāo)記
pDoc->UpdateAllViews(NULL); // 更新視圖
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
}
void CLineTransView::OnCharsegemt()
{
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -