?? dynsplitview2.cpp
字號:
}
}
//圖像灰度分布均衡化消息映射
void CDynSplitView2::OnFenbujunhenghua()
{
clearmem();
int i;
state3=0;
// 計算灰度分布密度
CDibNew1->ZhiFangTu(midu2); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg2;
dlg2=new CDlgZhiFangTu(this);
dlg2->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg2->m_fIntensity[i] = midu2[i];
if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9) //灰度圖像
{
clearmem();
CDibNew1->Fenbujunhenghua(); //調用分布均衡化處理函數
Invalidate(); //調用刷新函數
}
else //24位彩色
{
clearmem2();
CDibNew1->Fenbujunhenghua(); //調用分布均衡化處理函數
Invalidate(); //調用刷新函數
}
}
//匹配變換消息映射
void CDynSplitView2::OnPipeibianhuan()
{
clearmem();
int n;
state3=0;
// 計算灰度分布密度
CDibNew1->ZhiFangTu(midu2); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg2;
dlg2=new CDlgZhiFangTu(this);
dlg2->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (n = 0; n <256; n++)
dlg2->m_fIntensity[n] = midu2[n];
//--------直方圖設置 開始------------------------------------------
int nu[64];
float pu[64];
float a=1.0f/(32.0f*63.0f);
for(int i=0;i<64;i++)
{
nu[i]=i*4;
pu[i]=a*i;
}
//--------直方圖設置 結束------------------------------------------
if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9) //灰度圖像
{
clearmem();
CDibNew1->Pipeibianhuan(64,nu, pu); //調用匹配變化處理函數
Invalidate(); //調用刷新函數
}
else //24位彩色
{
clearmem2();
CDibNew1->Pipeibianhuan(64,nu, pu); //調用匹配變化處理函數
Invalidate(); //調用刷新函數
}
}
//原圖直方圖顯示
void CDynSplitView2::OnYuantuzhifangtu()
{
int i;
clearmem();
// 各顏色分量的灰度分布密度
float midu[256];
// 計算灰度分布密度
CDibNew1->ZhiFangTu(midu); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg3;
dlg3=new CDlgZhiFangTu(this);
dlg3->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg3->m_fIntensity[i] = midu[i];
// 顯示對話框,由用戶進行灰度折線變換
dlg3->ShowWindow(SW_RESTORE);
}
//水平投影消息映射
void CDynSplitView2::OnShuipingtouying()
{
clearmem();
int i;
state3=0;
// 計算灰度分布密度
CDibNew1->ZhiFangTu(midu2); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg2;
dlg2=new CDlgZhiFangTu(this);
dlg2->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg2->m_fIntensity[i] = midu2[i];
if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9) //灰度圖像
{
clearmem();
CDibNew1->Shuipingtouying(); //調用水平投影處理函數
Invalidate();
}
else //24位彩色
{
clearmem2();
CDibNew1->Shuipingtouying(); //調用水平投影處理函數
Invalidate();
}
}
//垂直投影消息映射
void CDynSplitView2::OnChuizhitouying()
{
clearmem();
int i;
state3=0;
// 計算灰度分布密度
CDibNew1->ZhiFangTu(midu2); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg2;
dlg2=new CDlgZhiFangTu(this);
dlg2->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg2->m_fIntensity[i] = midu2[i];
if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9) //灰度圖像
{
clearmem();
CDibNew1->Chuizhitouying(); //調用垂直投影處理函數
Invalidate();
}
else //24位彩色
{
clearmem2();
CDibNew1->Chuizhitouying(); //調用垂直投影處理函數
Invalidate();
}
}
//非零取一法灰度變換消息映射
void CDynSplitView2::OnFei0()
{
clearmem();
int i;
state3=0;
// 計算灰度分布密度
CDibNew1->ZhiFangTu(midu2); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg2;
dlg2=new CDlgZhiFangTu(this);
dlg2->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg2->m_fIntensity[i] = midu2[i];
if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9) //灰度圖像
{
clearmem();
CDibNew1->Fei0(); //調用非零取一處理函數
Invalidate();
}
else //24位彩色
{
clearmem2();
CDibNew1->Fei0(); //調用非零取一處理函數
Invalidate();
}
}
//固定閥值灰度變換消息映射
void CDynSplitView2::OnGuding()
{
clearmem();
int i;
state3=0;
// 計算灰度分布密度
CDibNew1->ZhiFangTu(midu2); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg2;
dlg2=new CDlgZhiFangTu(this);
dlg2->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg2->m_fIntensity[i] = midu2[i];
if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9) //灰度圖像
{
clearmem();
CDlgGuDingFaZhi dlg;
if(IDOK==dlg.DoModal())
{
CDibNew1->GuDing(dlg.m_Yuzhi);
Invalidate();
}
}
else //24位彩色
{
clearmem2();
CDlgGuDingFaZhi dlg;
if(IDOK==dlg.DoModal())
{
CDibNew1->GuDing(dlg.m_Yuzhi);
Invalidate();
}
}
}
void CDynSplitView2::OnShuanGuDingFa()
{
clearmem();
int i;
state3=0;
// 計算灰度分布密度
CDibNew1->ZhiFangTu(midu2); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg2;
dlg2=new CDlgZhiFangTu(this);
dlg2->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg2->m_fIntensity[i] = midu2[i];
if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9) //灰度圖像
{
clearmem();
CDialogShuangYu dlg;
if(IDOK==dlg.DoModal())
{
CDibNew1->ShuangYu(dlg.m_ZhiYu1,dlg.m_ZhiYu2,dlg.m_mode);
Invalidate();
}
}
else //24位彩色
{
clearmem2();
CDialogShuangYu dlg;
if(IDOK==dlg.DoModal())
{
CDibNew1->ShuangYu(dlg.m_ZhiYu1,dlg.m_ZhiYu2,dlg.m_mode);
Invalidate();
}
}
}
void CDynSplitView2::clearmem2()
{
CDSplitDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc ->statedoc=0;
state2=1;
CDibNew1=&pDoc->CDibNew;
CDib1=&pDoc->CDib;
long int size=CDib1->GetHeight()*CDib1->GetDibWidthBytes();
memcpy(CDibNew1->m_pData,CDib1->m_pData,size);
}
void CDynSplitView2::OnRedZhiFangtu()
{
int i;
clearmem();
// 各顏色分量的灰度分布密度
float midu[256];
// 計算灰度分布密度
CDibNew1->RedZhiFangTu(midu); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg3;
dlg3=new CDlgZhiFangTu(this);
dlg3->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg3->m_fIntensity[i] = midu[i];
// 顯示對話框,由用戶進行灰度折線變換
dlg3->ShowWindow(SW_RESTORE);
}
void CDynSplitView2::OnBlueZhiFangtu()
{
int i;
clearmem();
// 各顏色分量的灰度分布密度
float midu[256];
// 計算灰度分布密度
CDibNew1->BlueZhiFangTu(midu); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg3;
dlg3=new CDlgZhiFangTu(this);
dlg3->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg3->m_fIntensity[i] = midu[i];
// 顯示對話框,由用戶進行灰度折線變換
dlg3->ShowWindow(SW_RESTORE);
}
void CDynSplitView2::OnGreenZhifangtu()
{
int i;
clearmem();
// 各顏色分量的灰度分布密度
float midu[256];
// 計算灰度分布密度
CDibNew1->GreenZhiFangTu(midu); //調用灰度統計處理函數
// 創建對話框
CDlgZhiFangTu* dlg3;
dlg3=new CDlgZhiFangTu(this);
dlg3->Create(IDD_DLG_zhifangtufenbu);
// 傳遞灰度分布密度數據給面板類
for (i = 0; i <256; i++)
dlg3->m_fIntensity[i] = midu[i];
// 顯示對話框,由用戶進行灰度折線變換
dlg3->ShowWindow(SW_RESTORE);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -