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

📄 rsipdoc.cpp

📁 基于小波的SAR斑点处理
💻 CPP
字号:
// RSIPDoc.cpp : implementation of the CRSIPDoc class
//

#include "stdafx.h"
#include "RSIP.h"
#include "RSIPDoc.h"

#include "GeneralPage.h"
#include "OptionDlg.h"
#include "gen.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc

IMPLEMENT_DYNCREATE(CRSIPDoc, CDocument)

BEGIN_MESSAGE_MAP(CRSIPDoc, CDocument)
	//{{AFX_MSG_MAP(CRSIPDoc)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
	ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
	ON_COMMAND(ID_FILE_EXPORT, OnFileExport)
	ON_COMMAND(ID_GK_SIX, OnGkSix)
	ON_COMMAND(ID_GK_THREE, OnGkThree)
	ON_COMMAND(IDC_GK_SIX_XY2BL, OnGkSixXy2bl)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc construction/destruction

CRSIPDoc::CRSIPDoc()
{
	m_pRSImage = NULL;
	m_bModifiedFlag = FALSE;
	m_bHistogramModified = FALSE;
	m_szdatFilePathName.Empty();
	
	m_dZoomedRatio = 1.0;
}

CRSIPDoc::~CRSIPDoc()
{
	if(m_pRSImage != NULL)
	{
		delete []m_pRSImage;
	}
}

BOOL CRSIPDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc serialization

void CRSIPDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc diagnostics

#ifdef _DEBUG
void CRSIPDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CRSIPDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc commands

void CRSIPDoc::OnFileOpen() 
{
	CFileDialog dlg(TRUE,"dat",NULL,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		"RS Images(*.dat,*.raw)|*.dat;*.raw||",NULL); 
	if(dlg.DoModal() == IDOK)
		OnOpenDocument(dlg.GetPathName());

	return;
}

void CRSIPDoc::OnFileSave() 
{
	// save as a new file if the data is modified.
	if(m_bModifiedFlag == TRUE || m_szdatFilePathName == _T(""))
		OnFileSaveAs();
	else
		// save directly if the data is not modified.
		if(m_pRSImage->SaveImage(m_szdatFilePathName))
			m_bModifiedFlag = FALSE;
}

void CRSIPDoc::OnFileSaveAs() 
{
	CFileDialog dlg(FALSE,"dat",NULL,
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"RS Images(*.dat)|*.dat||",NULL);
	if(dlg.DoModal() == IDOK)
	{
		CString szTemp;
		szTemp = dlg.GetPathName();
		
		if(m_pRSImage->SaveImage(szTemp))
		{
			m_szdatFilePathName = szTemp;
			m_bModifiedFlag = FALSE;
		}
	}
}

void CRSIPDoc::OnFileClose() 
{
	int nTemp = IDNO;

	if(m_bModifiedFlag == TRUE)
	{
		nTemp = AfxMessageBox("数据已被修改,关闭前是否保存为一个新文件?",MB_YESNO);
		if(nTemp == IDYES)
			OnFileSaveAs();
	}
	
	CDocument::OnCloseDocument();
}

BOOL CRSIPDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	//if (!CDocument::OnOpenDocument(lpszPathName))
	//	return FALSE;
	
	// Open the dat file
	m_szdatFilePathName = lpszPathName;
	CFile datFile;
	if(0 == datFile.Open(m_szdatFilePathName,CFile::modeRead))
	{
		AfxMessageBox("打开数据文件失败!");
		//datFile.Close();
		return FALSE;
	}
		
	m_pRSImage = new CRSImage;
	ASSERT(m_pRSImage != NULL);
	CImgInfoSheet infoSheet("");

	// Open the inf file
	CFile infFile;
	char szInfFileName[256];
	char drive[3];
	char dir[256];
	char name[256];
	char ext[5];
	_splitpath(m_szdatFilePathName,drive,dir,name,ext);
	strcpy(szInfFileName,drive);
	strcat(szInfFileName,dir);
	strcat(szInfFileName,name);
	strcat(szInfFileName,".inf");
	if(0 != infFile.Open(szInfFileName,CFile::modeRead) && 
		m_pRSImage->LoadRsInfo(&infFile))
	{
		// 显示图象的信息
		infoSheet.SetTitle("请确认图象信息是否正确");
		infoSheet.m_GeneralInfo.m_dwImageSize = datFile.GetLength();
		infoSheet.m_GeneralInfo.m_nImgWidth = m_pRSImage->m_nImgWidth;
		infoSheet.m_GeneralInfo.m_nImgHeight = m_pRSImage->m_nImgHeight;
		infoSheet.m_GeneralInfo.m_dHResolution = m_pRSImage->m_dXResolution;
		infoSheet.m_GeneralInfo.m_dVResolution = m_pRSImage->m_dYResolution;
		infoSheet.m_GeneralInfo.m_dwDate = m_pRSImage->m_dwDateOfImage;
		infoSheet.m_GeneralInfo.m_szImgName = m_pRSImage->m_szImgName;
		infoSheet.m_GeneralInfo.m_nImgType = m_pRSImage->m_nImgType - 1;
		infoSheet.m_GeneralInfo.m_MinWaveLength = m_pRSImage->m_MinWaveLength;
		infoSheet.m_GeneralInfo.m_MaxWaveLength = m_pRSImage->m_MaxWaveLength;
			
		for(int i=0; i<8; i++)
		{
			infoSheet.m_LocationInfo.m_pGeoPosi[i] = m_pRSImage->m_pdGeoPosition[i];
		}

		CString * pszTemp;
		CString * pszTmp;
		for(i=0; i<infoSheet.m_LinkedImgPage.m_aLinkedImageArray.GetSize(); i++)
		{
			pszTemp = (CString *)infoSheet.m_LinkedImgPage.m_aLinkedImageArray.GetAt(i);
			delete pszTemp;
			infoSheet.m_LinkedImgPage.m_aLinkedImageArray.RemoveAt(i);
		}
		infoSheet.m_LinkedImgPage.m_nImageCount = m_pRSImage->m_nLinkedImage;
		for(i=0; i<infoSheet.m_LinkedImgPage.m_nImageCount;i++)
		{
			pszTemp = (CString *)m_pRSImage->m_aLinkedImageNameArray.GetAt(i);
			pszTmp = new CString();
			*pszTmp = *pszTemp;
			infoSheet.m_LinkedImgPage.m_aLinkedImageArray.Add(pszTmp);
		}
		infoSheet.m_LinkedImgPage.m_nImgHeight = m_pRSImage->m_nImgHeight;
		infoSheet.m_LinkedImgPage.m_nImgWidth = m_pRSImage->m_nImgWidth;

		infFile.Close();
	}
	else
	{
		infoSheet.SetTitle("请输入图象信息");
		infoSheet.m_GeneralInfo.m_dwImageSize = datFile.GetLength();
	}

	if(infoSheet.DoModal() == IDOK)
	{
		m_pRSImage->m_nImgWidth = infoSheet.m_GeneralInfo.m_nImgWidth;
		m_pRSImage->m_nImgHeight = infoSheet.m_GeneralInfo.m_nImgHeight;
		m_pRSImage->m_dXResolution = infoSheet.m_GeneralInfo.m_dHResolution;
		m_pRSImage->m_dYResolution = infoSheet.m_GeneralInfo.m_dVResolution;
		m_pRSImage->m_dwDateOfImage = infoSheet.m_GeneralInfo.m_dwDate;
		m_pRSImage->m_szImgName = infoSheet.m_GeneralInfo.m_szImgName;
		m_pRSImage->m_nImgType = infoSheet.m_GeneralInfo.m_nImgType + 1;
		m_pRSImage->m_MinWaveLength = infoSheet.m_GeneralInfo.m_MinWaveLength;
		m_pRSImage->m_MaxWaveLength = infoSheet.m_GeneralInfo.m_MaxWaveLength;

		for(int i=0; i<8; i++)
		{
			m_pRSImage->m_pdGeoPosition[i] = infoSheet.m_LocationInfo.m_pGeoPosi[i];
		}

		CString * pszTemp;
		CString * pszTmp;
		for(i=0; i<m_pRSImage->m_aLinkedImageNameArray.GetSize(); i++)
		{
			pszTemp = (CString *)m_pRSImage->m_aLinkedImageNameArray.GetAt(i);
			delete pszTemp;
			m_pRSImage->m_aLinkedImageNameArray.RemoveAt(i);
		}
		m_pRSImage->m_nLinkedImage = infoSheet.m_LinkedImgPage.m_nImageCount;
		for(i=0; i<m_pRSImage->m_nLinkedImage; i++)
		{
			pszTemp = (CString *)infoSheet.m_LinkedImgPage.m_aLinkedImageArray.GetAt(i);
			pszTmp = new CString();
			*pszTmp = *pszTemp;
			m_pRSImage->m_aLinkedImageNameArray.Add(pszTmp);
		}
	}
		
	m_pRSImage->LoadRsImage(&datFile,m_pRSImage->m_nImgHeight,m_pRSImage->m_nImgWidth);

	datFile.Close();
	SetTitle(lpszPathName);
	UpdateAllViews(NULL);			
	return TRUE;
}

void CRSIPDoc::OnFileExport() 
{
	CFileDialog dlg(FALSE,NULL,NULL,
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
		"Bitmap Files(*.bmp)|*.bmp||",NULL);
	if(dlg.DoModal() == IDOK)
	{
		CFile file;
		if(0 == file.Open(dlg.GetPathName(),CFile::modeCreate|CFile::modeWrite))
		{
			AfxMessageBox("创建BMP文件失败!");
			return;
		}

		if(!m_pRSImage->SaveBmp(&file))
		{
			file.Close();
			return;
		}

		file.Close();
	}	
}

void CRSIPDoc::OnGkSix() 
{
	COptionDlg optionDlg;
	optionDlg.m_nWidth = 6;
	if (IDOK == optionDlg.DoModal())
	{
		OpenFileBL2XY(optionDlg.m_nWidth,optionDlg.m_nZone);
	}
}

void CRSIPDoc::OnGkThree() 
{
	COptionDlg optionDlg;
	optionDlg.m_nWidth = 3;
	if(optionDlg.DoModal() == IDOK)
	{
		OpenFileBL2XY(optionDlg.m_nWidth,optionDlg.m_nZone);
	}
}

void CRSIPDoc::OnGkSixXy2bl() 
{
	COptionDlg optionDlg;
	optionDlg.m_nWidth = 6;
	if( optionDlg.DoModal() == IDOK)
	{
		OpenFileXY2BL(optionDlg.m_nWidth,optionDlg.m_nZone);
	}
}

void CRSIPDoc::OpenFileBL2XY(UINT width, UINT zone)
{
	// open FileDialog to read Arc/Info Gen file
	const char szExt[] = ".gen";
	const char szInitName[] = "gen1.gen";
	const char szFilter[] = "Gen Files(*.gen)|*.gen|All Files(*.*)|*.*||";
	CString szFileName;
	CFileDialog fileDialog(FALSE, szExt,szInitName,OFN_EXPLORER|
						OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,szFilter,NULL);
	
	if (IDOK == fileDialog.DoModal())
	{
		szFileName = fileDialog.GetPathName();
		// Input a filename to 
		const char szExt2[] = ".54";
		
		CString  cszInitName2= fileDialog.GetFileTitle() + ".54";
		const char szFilter2[] = "54 Files(*.54)|*.54|All Files(*.*)|*.*||";
		CString szFileName2;
		CFileDialog fileDialog2(FALSE, szExt2,cszInitName2,OFN_OVERWRITEPROMPT,szFilter2,NULL);
		
		if (IDOK == fileDialog2.DoModal())
		{
			szFileName2 = fileDialog2.GetPathName();
			CGenFile genFile(width, zone);
			if (width == 3)
				genFile.Transform(szFileName, szFileName2);
			else
				genFile.Trans6bl2xy(szFileName, szFileName2);
		}
	}
}

void CRSIPDoc::OpenFileXY2BL(UINT width, UINT zone)
{
	// open FileDialog to read Arc/Info Gen file
	const char szExt[] = ".54";
	const char szInitName[] = "541.54";	
	const char szFilter[] = "54 Files(*.54)|*.54|All Files(*.*)|*.*||";
	CString szFileName;
	CFileDialog fileDialog(FALSE, szExt,szInitName,OFN_EXPLORER|
						OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,szFilter,NULL);
	
	if (IDOK == fileDialog.DoModal())
	{
		szFileName = fileDialog.GetPathName();
		// Input a filename to 
		const char szExt2[] = ".gen";

		CString  cszInitName2= fileDialog.GetFileTitle() + ".gen";
		const char szFilter2[] = "gen Files(*.gen)|*.gen|All Files(*.*)|*.*||";
		CString szFileName2;
		CFileDialog fileDialog2(FALSE, szExt2,cszInitName2,OFN_OVERWRITEPROMPT,szFilter2,NULL);
		
		if (IDOK == fileDialog2.DoModal())
		{
			szFileName2 = fileDialog2.GetPathName();
			CGenFile genFile(width, zone);
			genFile.Trans6xy2bl(szFileName, szFileName2);
		}
	}
}

⌨️ 快捷键说明

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