⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generalpage.cpp

📁 基于小波的SAR斑点处理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// GeneralPage.cpp : implementation file
//

#include "stdafx.h"
#include "RSIP.h"
#include "GeneralPage.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGeneralPage property page

IMPLEMENT_DYNCREATE(CGeneralPage, CPropertyPage)

CGeneralPage::CGeneralPage() : CPropertyPage(CGeneralPage::IDD)
{
	//{{AFX_DATA_INIT(CGeneralPage)
	m_nDay = 0;
	m_nYear = 0;
	m_nMonth = 0;
	m_dHResolution = 1.0;
	m_dVResolution = 1.0;
	m_nImgWidth = 0;
	m_nImgHeight = 0;
	m_szImgName = _T("");
	m_nImgType = 0;
	//}}AFX_DATA_INIT
	m_dwImageSize = 0;
	m_MinWaveLength = 0;
	m_MaxWaveLength = 0;
	m_dwDate = 0;
}

CGeneralPage::~CGeneralPage()
{
}

void CGeneralPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGeneralPage)
	DDX_Control(pDX, IDC_MINWAVELENGTH, m_cMinWaveLength);
	DDX_Control(pDX, IDC_MAXWAVELENGTH, m_cMaxWaveLength);
	DDX_Text(pDX, IDC_DAY, m_nDay);
	DDX_Text(pDX, IDC_YEAR, m_nYear);
	DDX_Text(pDX, IDC_MONTH, m_nMonth);
	DDX_Text(pDX, IDC_HRESOLUTION, m_dHResolution);
	DDX_Text(pDX, IDC_VRESOLUTION, m_dVResolution);
	DDX_Text(pDX, IDC_IMGWIDTH, m_nImgWidth);
	DDX_Text(pDX, IDC_IMGHEIGHT, m_nImgHeight);
	DDX_Text(pDX, IDC_IMGNAME, m_szImgName);
	DDX_Radio(pDX, IDC_SINGLEBAND_RADIO, m_nImgType);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CGeneralPage, CPropertyPage)
	//{{AFX_MSG_MAP(CGeneralPage)
	ON_BN_CLICKED(IDC_INCHEIGHT, OnIncHeight)
	ON_BN_CLICKED(IDC_INCWIDTH, OnIncWidth)
	ON_BN_CLICKED(IDC_SINGLEBAND_RADIO, OnSinglebandRadio)
	ON_BN_CLICKED(IDC_THEMATIC_RADIO, OnThematicRadio)
	ON_BN_CLICKED(IDC_COMBINE_RADIO, OnCombineRadio)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGeneralPage message handlers
BOOL CGeneralPage::GetHeightAndWidth(DWORD Size,int *Height,int *Width,int BegSearch,BOOL Up)
{
	if(Size == 0) return FALSE;

	DWORD Guess;
	DWORD i;
	if(Up==TRUE)
	{
		for(i=BegSearch+1; i<=Size; i++)
		{
			Guess = Size/i;
			if((DWORD)Guess*i==Size)
				break;
		}
	}
	else
	{	
		for(i=BegSearch-1; i>0; i--)
		{
			Guess = Size/i;
			if((DWORD)Guess*i==Size)
				break;
		}
	}
	if((int)Guess<=0 || (int)i<=0)
		return FALSE;
	*Width = (int)Guess;
	*Height = (int)i;
	if(Guess*i != Size)
		return FALSE;
	return TRUE;
}

void CGeneralPage::SetWaveLengthValue()
{
	if(m_cMinWaveLength.GetCount()!=0)
		m_cMinWaveLength.ResetContent();
	if(m_cMaxWaveLength.GetCount()!=0)
		m_cMaxWaveLength.ResetContent();

	m_cMinWaveLength.AddString("0.0微米(缺省)");
	m_cMinWaveLength.AddString("0.45微米(TM1)");
	m_cMinWaveLength.AddString("0.52微米(TM2)");
	m_cMinWaveLength.AddString("0.63微米(TM3)");
	m_cMinWaveLength.AddString("0.76微米(TM4)");
	m_cMinWaveLength.AddString("1.55微米(TM5)");
	m_cMinWaveLength.AddString("2.08微米(TM7)");
	m_cMinWaveLength.AddString("10.40微米(TM6)");
	
	m_cMaxWaveLength.AddString("0.0微米(缺省)");
	m_cMaxWaveLength.AddString("0.50微米(TM1)");
	m_cMaxWaveLength.AddString("0.60微米(TM2)");
	m_cMaxWaveLength.AddString("0.69微米(TM3)");
	m_cMaxWaveLength.AddString("0.94微米(TM4)");
	m_cMaxWaveLength.AddString("1.75微米(TM5)");
	m_cMaxWaveLength.AddString("2.35微米(TM7)");
	m_cMaxWaveLength.AddString("12.50微米(TM6)");
}

BOOL CGeneralPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();

	// Set wavelength value
	SetWaveLengthValue();
	
	// set the image type and wavelength
	DWORD dwSize;
	if(m_nImgType == 2)			//Combined image
	{
		dwSize = m_dwImageSize/3;
		m_cMinWaveLength.EnableWindow(FALSE);
		m_cMaxWaveLength.EnableWindow(FALSE);
		CheckDlgButton(IDC_COMBINE_RADIO,1);
	}
	else if(m_nImgType ==1)
	{
		dwSize = m_dwImageSize;
		m_cMinWaveLength.EnableWindow(FALSE);
		m_cMaxWaveLength.EnableWindow(FALSE);
		CheckDlgButton(IDC_THEMATIC_RADIO,1);
	}
	else
	{
		dwSize = m_dwImageSize;
		m_cMinWaveLength.EnableWindow(TRUE);
		m_cMaxWaveLength.EnableWindow(TRUE);
		CheckDlgButton(IDC_SINGLEBAND_RADIO,1);
		m_cMinWaveLength.SetCurSel(m_MinWaveLength);
		m_cMaxWaveLength.SetCurSel(m_MaxWaveLength);
	}

	// Set the height and width
	if(m_nImgWidth!=0 && m_nImgHeight!=0)
	{
		SetDlgItemInt(IDC_IMGWIDTH,m_nImgWidth);
		SetDlgItemInt(IDC_IMGHEIGHT,m_nImgHeight);
	}
	else
	{
		int sqrtSize = (int)sqrt(dwSize)+1;
		if(GetHeightAndWidth(dwSize,&m_nImgHeight,&m_nImgWidth,sqrtSize,FALSE))
		{
		SetDlgItemInt(IDC_IMGWIDTH,m_nImgWidth);
		SetDlgItemInt(IDC_IMGHEIGHT,m_nImgHeight);
		}
	}

	// Set the resolution
	if(m_dHResolution!=0.0 && m_dVResolution!=0.0)
	{
		char szTemp[20];
		sprintf(szTemp,"%.2f",m_dHResolution);
		SetDlgItemText(IDC_HRESOLUTION,szTemp);
		sprintf(szTemp,"%.2f",m_dVResolution);
		SetDlgItemText(IDC_VRESOLUTION,szTemp);
	}
	
	// set the image name and date
	if(m_szImgName != _T(""))
	{
		SetDlgItemText(IDC_IMGNAME,m_szImgName);
	}
	
	if(m_dwDate != 0)
	{
		int temp;
		m_nYear = m_dwDate/10000;
		temp = m_dwDate%10000;
		m_nMonth = temp/100;
		m_nDay = temp%100;

		SetDlgItemInt(IDC_YEAR,m_nYear);
		SetDlgItemInt(IDC_MONTH,m_nMonth);
		SetDlgItemInt(IDC_DAY,m_nDay);
	}

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CGeneralPage::OnSinglebandRadio() 
{
	if(m_nImgType == 0)
		return;
	m_nImgType = 0;

	GetDlgItem(IDC_MINWAVELENGTH)->EnableWindow(TRUE);
	GetDlgItem(IDC_MAXWAVELENGTH)->EnableWindow(TRUE);
	m_cMinWaveLength.SetCurSel(m_MinWaveLength);
	m_cMaxWaveLength.SetCurSel(m_MaxWaveLength);

	DWORD dwSize;
	dwSize = m_dwImageSize;

	int SqrtSize = (int)sqrt(dwSize)+1;
	if(GetHeightAndWidth(dwSize,&m_nImgHeight,&m_nImgWidth,SqrtSize,FALSE))
	{
		SetDlgItemInt(IDC_IMGWIDTH,m_nImgWidth);
		SetDlgItemInt(IDC_IMGHEIGHT,m_nImgHeight);
	}
}

void CGeneralPage::OnThematicRadio() 
{
	if(m_nImgType == 1)
		return;
	m_nImgType = 1;

	GetDlgItem(IDC_MINWAVELENGTH)->EnableWindow(FALSE);
	GetDlgItem(IDC_MAXWAVELENGTH)->EnableWindow(FALSE);
	//m_cMinWaveLength.SetCurSel(0);
	//m_cMaxWaveLength.SetCurSel(0);

	DWORD dwSize;
	dwSize = m_dwImageSize;

	int SqrtSize = (int)sqrt(dwSize)+1;
	if(GetHeightAndWidth(dwSize,&m_nImgHeight,&m_nImgWidth,SqrtSize,FALSE))
	{
		SetDlgItemInt(IDC_IMGWIDTH,m_nImgWidth);
		SetDlgItemInt(IDC_IMGHEIGHT,m_nImgHeight);
	}
}

void CGeneralPage::OnCombineRadio() 
{
	if(m_nImgType == 2)
		return;
	m_nImgType = 2;

	GetDlgItem(IDC_MINWAVELENGTH)->EnableWindow(FALSE);
	GetDlgItem(IDC_MAXWAVELENGTH)->EnableWindow(FALSE);	
	//m_cMinWaveLength.SetCurSel(0);
	//m_cMaxWaveLength.SetCurSel(0);

	DWORD dwSize;
	dwSize = m_dwImageSize/3;
	
	int SqrtSize = (int)sqrt(dwSize)+1;
	if(GetHeightAndWidth(dwSize,&m_nImgHeight,&m_nImgWidth,SqrtSize,FALSE))
	{
		SetDlgItemInt(IDC_IMGWIDTH,m_nImgWidth);
		SetDlgItemInt(IDC_IMGHEIGHT,m_nImgHeight);
	}
}

void CGeneralPage::OnIncHeight() 
{
	if(m_dwImageSize == 0)
		return;
	int TempCol = m_nImgWidth;
	int TempRow = m_nImgHeight;

	DWORD dwSize;
	if(m_nImgType == 2)		//Combined image
		dwSize = m_dwImageSize/3;
	else
		dwSize = m_dwImageSize;

	if(GetHeightAndWidth(dwSize,&TempRow,&TempCol,m_nImgHeight,1))
	{
		m_nImgHeight = TempRow;
		m_nImgWidth = TempCol;
		SetDlgItemInt(IDC_IMGWIDTH,m_nImgWidth);
		SetDlgItemInt(IDC_IMGHEIGHT,m_nImgHeight);
	}	
}

void CGeneralPage::OnIncWidth() 
{
	if(m_dwImageSize == 0)
		return;
	int TempCol = m_nImgWidth;
	int TempRow = m_nImgHeight;

	DWORD dwSize;
	if(m_nImgType == 2)		//Combined image
		dwSize = m_dwImageSize/3;
	else
		dwSize = m_dwImageSize;

	if(GetHeightAndWidth(dwSize,&TempRow,&TempCol,m_nImgHeight,0))
	{
		m_nImgHeight = TempRow;
		m_nImgWidth = TempCol;
		SetDlgItemInt(IDC_IMGWIDTH,m_nImgWidth);
		SetDlgItemInt(IDC_IMGHEIGHT,m_nImgHeight);
	}	
}

BOOL CGeneralPage::OnKillActive() 
{
	UpdateData();

	if(m_dHResolution<0 || m_dVResolution<0)
	{
		MessageBox("分辨率输入值错误!");
		return FALSE;
	}
	if(m_nYear!=0 && m_nMonth!=0 && m_nDay!=0)
	{
		if(m_nYear<1960 || m_nYear>2050 ||
			m_nMonth<=0 || m_nMonth>12 ||

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -