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