📄 wavelettransformdlg.cpp
字号:
// WaveletTransformDlg.cpp : implementation file
//
#include "stdafx.h"
#include "RSIP.h"
#include "WaveletTransformDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWaveletTransformDlg dialog
CWaveletTransformDlg::CWaveletTransformDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWaveletTransformDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWaveletTransformDlg)
m_WTTransform_Times = 1;
//}}AFX_DATA_INIT
m_WTBasis_Selected = 0;
m_operatingMode = FALSE;
}
void CWaveletTransformDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWaveletTransformDlg)
DDX_Control(pDX, IDC_WAVELET_BASIS_LIST, m_WTTransform_List);
DDX_Text(pDX, IDC_WAVELET_TRANSFORM_TIMES, m_WTTransform_Times);
DDV_MinMaxByte(pDX, m_WTTransform_Times, 1, 100);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWaveletTransformDlg, CDialog)
//{{AFX_MSG_MAP(CWaveletTransformDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWaveletTransformDlg message handlers
BOOL CWaveletTransformDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置可供使用的小波基
m_WTTransform_List.AddString("对称紧支集双正交小波(S1D3)");
m_WTTransform_List.AddString("对称紧支集双正交小波(S2D2)");
m_WTTransform_List.AddString("对称紧支集双正交小波(S3D1)");
// 将第一组小波基设置为确省选择的,或设置某组小波基被选
m_WTTransform_List.SetCurSel(m_WTBasis_Selected);
// 设置微调的范围,设置小波变换的次数
CSpinButtonCtrl * pSpin = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
pSpin->SetRange(1,100);
pSpin->SetPos(m_WTTransform_Times);
// 设置对话框的标题
if(m_operatingMode)
SetWindowText("小波变换");
else
SetWindowText("小波逆变换");
return TRUE;
}
void CWaveletTransformDlg::OnOK()
{
UpdateData();
m_WTBasis_Selected = m_WTTransform_List.GetCurSel();
if(m_WTBasis_Selected == -1)
{
MessageBox("请务必选择一组小波基!");
return;
}
CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// CWaveletReplaceDlg dialog
CWaveletReplaceDlg::CWaveletReplaceDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWaveletReplaceDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWaveletReplaceDlg)
m_strToImage = _T("");
m_strFromImage = _T("");
//}}AFX_DATA_INIT
m_nFromHeight = 0;
m_nFromWidth = 0;
m_nToHeight = 0;
m_nToWidth = 0;
m_nFromWTBasis = 0;
m_nFromWTTimes = 0;
m_nToWTBasis = 0;
m_nToWTTimes = 0;
m_bFlag = TRUE;
m_nSizeIndex = 0;
}
void CWaveletReplaceDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWaveletReplaceDlg)
DDX_Control(pDX, IDC_MODALSIZE, m_ctrlSize);
DDX_Text(pDX, IDC_TO_FILE, m_strToImage);
DDX_Text(pDX, IDC_FROM_FILE, m_strFromImage);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWaveletReplaceDlg, CDialog)
//{{AFX_MSG_MAP(CWaveletReplaceDlg)
ON_BN_CLICKED(IDC_FROM_IMAGE, OnFromImage)
ON_BN_CLICKED(IDC_TO_IMAGE, OnToImage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWaveletReplaceDlg message handlers
BOOL CWaveletReplaceDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//设置对话框标题
if(m_bFlag==TRUE)
SetWindowText("高频系数整体选择");
else
SetWindowText("高频系数局部选择");
m_ctrlSize.ResetContent();
m_ctrlSize.AddString("1 * 1");
m_ctrlSize.AddString("3 * 3");
m_ctrlSize.AddString("5 * 5");
if(m_bFlag == TRUE)
//禁止下拉列表
GetDlgItem(IDC_MODALSIZE)->EnableWindow(FALSE);
else
GetDlgItem(IDC_MODALSIZE)->EnableWindow(TRUE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CWaveletReplaceDlg::OnFromImage()
{
UpdateData(TRUE);
//打开文件对话框
CFileDialog dlg(TRUE,"wtf",NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Wavelet Transform Files(*.wtf)|*.wtf||",NULL);
if(dlg.DoModal()==IDOK)
{
m_strFromImage = dlg.GetPathName();
CFile file;
if(0 != file.Open(m_strFromImage,CFile::modeRead))
{
file.Read(&m_nFromWidth,sizeof(int));
file.Read(&m_nFromHeight,sizeof(int));
file.Read(&m_nFromWTBasis,sizeof(int));
file.Read(&m_nFromWTTimes,sizeof(int));
file.Close();
}
else
{
AfxMessageBox("打开文件失败!");
return;
}
}
UpdateData(FALSE);
}
void CWaveletReplaceDlg::OnToImage()
{
UpdateData(TRUE);
CFileDialog dlg(TRUE,"wtf",NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Wavelet Transform Files(*.wtf)|*.wtf||",NULL);
if(dlg.DoModal()==IDOK)
{
m_strToImage = dlg.GetPathName();
CFile file;
if(0 != file.Open(m_strToImage,CFile::modeRead))
{
file.Read(&m_nToWidth,sizeof(int));
file.Read(&m_nToHeight,sizeof(int));
file.Read(&m_nToWTBasis,sizeof(int));
file.Read(&m_nToWTTimes,sizeof(int));
file.Close();
}
else
{
AfxMessageBox("打开文件失败!");
return;
}
}
UpdateData(FALSE);
}
void CWaveletReplaceDlg::OnOK()
{
UpdateData(TRUE);
if( m_strFromImage.GetLength() == 0 ||
m_strToImage.GetLength() == 0 )
{
AfxMessageBox("请选择操作所需的文件!");
return;
}
if( m_nFromWTBasis != m_nToWTBasis ||
m_nToWTTimes != m_nToWTTimes )
{
AfxMessageBox("小波变换的基或者变换次数不相同!");
return;
}
m_nSizeIndex = m_ctrlSize.GetCurSel();
CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// CThresWeightDlg dialog
CThresWeightDlg::CThresWeightDlg(CWnd* pParent /*=NULL*/)
: CDialog(CThresWeightDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CThresWeightDlg)
m_fLowThreshold = 0.5;
m_strSpatial = _T("");
m_strSpectral = _T("");
//}}AFX_DATA_INIT
m_nEWidth = 0;
m_nEHeight = 0;
m_nEBasis = 0;
m_nETimes = 0;
m_nAWidth = 0;
m_nAHeight = 0;
m_nABasis = 0;
m_nATimes = 0;
m_nSizeIndex = 0;
}
void CThresWeightDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CThresWeightDlg)
DDX_Control(pDX, IDC_LIST_SIZE, m_ctrlSize);
DDX_Text(pDX, IDC_LOW_THRESHOLD, m_fLowThreshold);
DDV_MinMaxFloat(pDX, m_fLowThreshold, 0.f, 1.f);
DDX_Text(pDX, IDC_SPATIAL_EDIT, m_strSpatial);
DDX_Text(pDX, IDC_SPECTRAL_EDIT, m_strSpectral);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CThresWeightDlg, CDialog)
//{{AFX_MSG_MAP(CThresWeightDlg)
ON_BN_CLICKED(IDC_SPATIAL_BUTTON, OnSpatialButton)
ON_BN_CLICKED(IDC_SPECTRAL_BUTTON, OnSpectralButton)
ON_WM_VSCROLL()
ON_LBN_SELCHANGE(IDC_LIST_SIZE, OnSelchangeListSize)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CThresWeightDlg message handlers
BOOL CThresWeightDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CSpinButtonCtrl * pSpin = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
pSpin->SetRange(0,100);
pSpin->SetPos((int)(m_fLowThreshold*100.0));
m_ctrlSize.ResetContent();
m_ctrlSize.AddString("1 * 1");
m_ctrlSize.AddString("3 * 3");
m_ctrlSize.AddString("5 * 5");
return TRUE;
}
//更新滑动条
void CThresWeightDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(pScrollBar->GetDlgCtrlID() == IDC_SPIN1)
{
CString strValue;
strValue.Format("%.2f",float(nPos/100.0));
m_fLowThreshold = nPos/100.0;
((CSpinButtonCtrl *)pScrollBar)->GetBuddy()->SetWindowText(strValue);
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CThresWeightDlg::OnSpatialButton()
{
CFileDialog dlg(TRUE,"wtf",NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Wavelet Transform Files(*.wtf)|*.wtf||",NULL);
if(dlg.DoModal() == IDOK)
{
m_strSpatial = dlg.GetPathName();
CFile file;
if(0 != file.Open(m_strSpatial,CFile::modeRead))
{
file.Read(&m_nAWidth,sizeof(int));
file.Read(&m_nAHeight,sizeof(int));
file.Read(&m_nABasis,sizeof(int));
file.Read(&m_nATimes,sizeof(int));
file.Close();
}
else
{
AfxMessageBox("打开文件失败!");
return;
}
}
UpdateData(FALSE);
}
void CThresWeightDlg::OnSpectralButton()
{
CFileDialog dlg(TRUE,"wtf",NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Wavelet Transform Files(*.wtf)|*.wtf||",NULL);
if(dlg.DoModal() == IDOK)
{
m_strSpectral = dlg.GetPathName();
CFile file;
if(0 != file.Open(m_strSpectral,CFile::modeRead))
{
file.Read(&m_nEWidth,sizeof(int));
file.Read(&m_nEHeight,sizeof(int));
file.Read(&m_nEBasis,sizeof(int));
file.Read(&m_nETimes,sizeof(int));
file.Close();
}
else
{
AfxMessageBox("打开文件失败!");
return;
}
}
UpdateData(FALSE);
}
void CThresWeightDlg::OnOK()
{
UpdateData(TRUE);
if( m_strSpectral.GetLength()==0 ||
m_strSpatial.GetLength()==0 )
{
AfxMessageBox("请选择文件!");
return;
}
if( m_nEWidth != m_nAWidth ||
m_nEHeight != m_nAHeight ||
m_nEBasis != m_nABasis ||
m_nETimes != m_nATimes )
{
AfxMessageBox("图像尺寸或小波基或变换次数不同!");
return;
}
m_nSizeIndex = m_ctrlSize.GetCurSel();
CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// CExponentDlg dialog
CExponentDlg::CExponentDlg(CWnd* pParent /*=NULL*/)
: CDialog(CExponentDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CExponentDlg)
m_fExponent = 0.125f;
//}}AFX_DATA_INIT
}
void CExponentDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CExponentDlg)
DDX_Text(pDX, IDC_EXPONENT_EDIT, m_fExponent);
DDV_MinMaxFloat(pDX, m_fExponent, 0.1f, 0.2f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CExponentDlg, CDialog)
//{{AFX_MSG_MAP(CExponentDlg)
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CExponentDlg message handlers
BOOL CExponentDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CSpinButtonCtrl * pSpin = (CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1);
pSpin->SetRange(100,200);
pSpin->SetPos((int)(m_fExponent*1000.0));
return TRUE;
}
void CExponentDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(pScrollBar->GetDlgCtrlID() == IDC_SPIN1)
{
CString strValue;
strValue.Format("%.3f",float(nPos/1000.0));
((CSpinButtonCtrl *)pScrollBar)->GetBuddy()
->SetWindowText(strValue);
}
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CThresWeightDlg::OnSelchangeListSize()
{
// TODO: Add your control notification handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -