?? ch1_1view.cpp
字號(hào):
FLOAT fB;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的線性變換,其它的可以類推)
if (::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;
// 顯示對(duì)話框,提示用戶設(shè)定平移量
if (dlgPara.DoModal() != IDOK)
{
// 返回
return;
}
// 獲取用戶設(shè)定的平移量
fA = dlgPara.m_fA;
fB = dlgPara.m_fB;
// 刪除對(duì)話框
delete dlgPara;
// 更改光標(biāo)形狀
BeginWaitCursor();
// 調(diào)用LinerTrans()函數(shù)進(jìn)行線性變換
LinerTrans(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), fA, fB);
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnPointThre()
{
// 閾值變換
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 參數(shù)對(duì)話框
CDlgPointThre dlgPara;
// 閾值
BYTE bThre;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的閾值變換,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的閾值變換!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 初始化變量值
dlgPara.m_bThre = 128;
// 顯示對(duì)話框,提示用戶設(shè)定閾值
if (dlgPara.DoModal() != IDOK)
{
// 返回
return;
}
// 獲取用戶設(shè)定的閾值
bThre = dlgPara.m_bThre;
// 刪除對(duì)話框
delete dlgPara;
// 更改光標(biāo)形狀
BeginWaitCursor();
// 調(diào)用ThresholdTrans()函數(shù)進(jìn)行閾值變換
ThresholdTrans(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), bThre);
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnPointWind()
{
// 窗口變換
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 創(chuàng)建對(duì)話框
CDlgPointWin dlgPara;
// 窗口下限
BYTE bLow;
// 窗口上限
BYTE bUp;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的窗口變換,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的窗口變換!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 初始化變量值
dlgPara.m_bLow = 0;
dlgPara.m_bUp = 255;
// 顯示對(duì)話框,提示用戶設(shè)定窗口上下限
if (dlgPara.DoModal() != IDOK)
{
// 返回
return;
}
// 獲取用戶設(shè)定的窗口上下限
bLow = dlgPara.m_bLow;
bUp = dlgPara.m_bUp;
// 刪除對(duì)話框
delete dlgPara;
// 更改光標(biāo)形狀
BeginWaitCursor();
// 調(diào)用WindowTrans()函數(shù)進(jìn)行窗口變換
WindowTrans(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), bLow, bUp);
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnPointStre()
{
// 灰度拉伸
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 創(chuàng)建對(duì)話框
CDlgPointStre dlgPara;
// 點(diǎn)1坐標(biāo)
BYTE bX1;
BYTE bY1;
// 點(diǎn)2坐標(biāo)
BYTE bX2;
BYTE bY2;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的灰度拉伸,其它的可以類推)
if (::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;
// 顯示對(duì)話框,提示用戶設(shè)定拉伸位置
if (dlgPara.DoModal() != IDOK)
{
// 返回
return;
}
// 獲取用戶的設(shè)定
bX1 = dlgPara.m_bX1;
bY1 = dlgPara.m_bY1;
bX2 = dlgPara.m_bX2;
bY2 = dlgPara.m_bY2;
// 刪除對(duì)話框
delete dlgPara;
// 更改光標(biāo)形狀
BeginWaitCursor();
// 調(diào)用GrayStretch()函數(shù)進(jìn)行灰度拉伸
GrayStretch(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), bX1, bY1, bX2, bY2);
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
void CCh1_1View::OnPointEqua()
{
// 灰度均衡
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 指向DIB象素指針
LPSTR lpDIBBits;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的直方圖均衡,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的直方圖均衡!", "系統(tǒng)提示" ,
MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 調(diào)用InteEqualize()函數(shù)進(jìn)行直方圖均衡
InteEqualize(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB));
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新視圖
pDoc->UpdateAllViews(NULL);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢復(fù)光標(biāo)
EndWaitCursor();
}
//////////////////////////////////////////////////////////////////////////////////////
// 圖像幾何變換
//
void CCh1_1View::OnGeomTran()
{
// 平移位圖
// 獲取文檔
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;
}
LONG lXOffset;
LONG lYOffset;
// 創(chuàng)建對(duì)話框
CDlgGeoTran dlgPara;
// 初始化變量值
dlgPara.m_XOffset = 100;
dlgPara.m_YOffset = 100;
// 顯示對(duì)話框,提示用戶設(shè)定平移量
if (dlgPara.DoModal() != IDOK)
{
// 返回
return;
}
// 獲取用戶設(shè)定的平移量
lXOffset = dlgPara.m_XOffset;
lYOffset = dlgPara.m_YOffset;
// 刪除對(duì)話框
delete dlgPara;
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用TranslationDIB()函數(shù)平移DIB
if (TranslationDIB1(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), lXOffset, lYOffset))
{
// 設(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::OnGeomMirv()
{
// 垂直鏡像
// 獲取文檔
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;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用MirrorDIB()函數(shù)垂直鏡像DIB
if (MirrorDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), FALSE))
{
// 設(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::OnGeomMirh()
{
// 水平鏡像
// 獲取文檔
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;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 找到DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
// 調(diào)用MirrorDIB()函數(shù)水平鏡像DIB
if (MirrorDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), TRUE))
{
// 設(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::OnGeomTrpo()
{
// 圖像轉(zhuǎn)置
// 獲取文檔
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指針
LPSTR lpDIB;
// 鎖定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的轉(zhuǎn)置,其它的可以類推)
if (::DIBNumColors(lpDIB) != 256)
{
// 提示用戶
MessageBox("目前只支持256色位圖的轉(zhuǎn)置!", "系統(tǒng)提示" , MB_ICONINFORMATION | MB_OK);
// 解除鎖定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 返回
return;
}
// 更改光標(biāo)形狀
BeginWaitCursor();
// 調(diào)用TransposeDIB()函數(shù)轉(zhuǎn)置DIB
if (TransposeDIB(lpDIB))
{
// 設(shè)置臟標(biāo)記
pDoc->SetModifiedFlag(TRUE);
// 更新DIB大小和調(diào)色板
pDoc->InitDIBData();
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -