📄 superviseddlg.cpp
字号:
// SupervisedDlg.cpp : implementation file
//
#include "stdafx.h"
#include "RSIP.h"
#include "ImgFunction.h"
#include "SupervisedDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSupervisedDlg dialog
CSupervisedDlg::CSupervisedDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSupervisedDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSupervisedDlg)
m_nImgHeight = 0;
m_nImgWidth = 0;
//}}AFX_DATA_INIT
}
void CSupervisedDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSupervisedDlg)
DDX_Control(pDX, IDC_IMAGELIST, m_ImageList);
DDX_Text(pDX, IDC_IMAGEHEIGHT, m_nImgHeight);
DDX_Text(pDX, IDC_IMAGEWIDTH, m_nImgWidth);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSupervisedDlg, CDialog)
//{{AFX_MSG_MAP(CSupervisedDlg)
ON_BN_CLICKED(IDC_BROWSEFILE, OnBrowsefile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSupervisedDlg message handlers
void CSupervisedDlg::OnBrowsefile()
{
CFileDialog fileDlg(TRUE,"*.cls",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Class Files(*.cls)|*.cls|Info Files(*.inf)|*.inf||",this);
if(fileDlg.DoModal() == IDOK)
{
CString szFileName = fileDlg.GetPathName();
m_RsClassInfoFile.Reset();
szFileName.MakeUpper();
int Length = szFileName.GetLength();
if( szFileName[Length-3] == 'C' &&
szFileName[Length-2] == 'L' &&
szFileName[Length-1] == 'S' )
{
CFile File;
if(0 == File.Open(szFileName,CFile::modeRead))
{
MessageBox("不能打开文件!");
return;
}
if(!m_RsClassInfoFile.ReadFrom(File))
{
MessageBox("打开分类信息文件失败!");
return;
}
File.Close();
m_RsClassInfoFile.Calculate();
}
else
{
CFile File;
if(0 == File.Open(szFileName,CFile::modeRead))
{
MessageBox("不能打开文件!");
return;
}
CRSImage *pRSImage = new CRSImage();
if(!pRSImage->LoadRsInfo(&File))
{
delete pRSImage;
MessageBox("打开图象信息文件失败!");
return;
}
if(pRSImage->m_nImgType != IMAGE_THEMATIC)
{
MessageBox("非专题影象的信息文件!");
delete pRSImage;
return;
}
m_RsClassInfoFile.m_nImageWidth = pRSImage->m_nImgWidth;
m_RsClassInfoFile.m_nImageHeight = pRSImage->m_nImgHeight;
m_RsClassInfoFile.m_nImageCount = pRSImage->m_nLinkedImage;
CString *pszTemp;
for(int i=0; i<m_RsClassInfoFile.m_nImageCount; i++)
{
pszTemp = new CString(*(CString *)(pRSImage->m_aLinkedImageNameArray[i]));
m_RsClassInfoFile.m_aImageNameArray.Add(pszTemp);
}
m_RsClassInfoFile.m_nClassCount = pRSImage->m_nClassNumber;
CRsThematicInfo *pThematicInfo;
CRSClassInfo *pClassInfo;
for(i=0; i<m_RsClassInfoFile.m_nClassCount; i++)
{
pThematicInfo = (CRsThematicInfo *)(pRSImage->m_aThemeInfoArray[i]);
pClassInfo = new CRSClassInfo();
pClassInfo->m_nValue = pThematicInfo->m_nValue;
pClassInfo->m_szClassName = pThematicInfo->m_szClassName;
pClassInfo->m_clrColor = pThematicInfo->m_clrColor;
pClassInfo->m_pdCenter = new double[m_RsClassInfoFile.m_nImageCount];
for(int j=0; j<m_RsClassInfoFile.m_nImageCount; j++)
{
pClassInfo->m_pdCenter[j] = pThematicInfo->m_pdCenter[j];
}
pClassInfo->m_pdCovariance = new double[m_RsClassInfoFile.m_nImageCount*m_RsClassInfoFile.m_nImageCount];
for(j=0; j<m_RsClassInfoFile.m_nImageCount*m_RsClassInfoFile.m_nImageCount; j++)
{
pClassInfo->m_pdCovariance[j] = pThematicInfo->m_pdCovariance[j];
}
m_RsClassInfoFile.m_aClassInfoArray.Add(pClassInfo);
}
delete pRSImage;
}
if(!IsAllFileExist(m_RsClassInfoFile.m_aImageNameArray))
{
MessageBox("文件中所列的部分图象不存在!",
"错误", MB_OK|MB_ICONINFORMATION);
return;
}
//Set the content of the item
m_ImageList.ResetContent();
CString *pszTemp;
for(int i=0; i<m_RsClassInfoFile.m_nImageCount; i++)
{
pszTemp = (CString *)(m_RsClassInfoFile.m_aImageNameArray[i]);
m_ImageList.AddString(*pszTemp);
}
SetDlgItemInt(IDC_IMAGEWIDTH,m_RsClassInfoFile.m_nImageWidth);
SetDlgItemInt(IDC_IMAGEHEIGHT,m_RsClassInfoFile.m_nImageHeight);
SetDlgItemInt(IDC_CLASSNUMBER,m_RsClassInfoFile.m_nClassCount);
}
}
/////////////////////////////////////////////////////////////////////////////
// CTrainingAreaDlg dialog
CTrainingAreaDlg::CTrainingAreaDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTrainingAreaDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTrainingAreaDlg)
m_nImgHeight = 0;
m_nImgWidth = 0;
//}}AFX_DATA_INIT
m_pView = (CView *)pParent;
}
void CTrainingAreaDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTrainingAreaDlg)
DDX_Control(pDX, IDC_CLASS_LIST, m_ClassList);
DDX_Text(pDX, IDC_IMAGEHEIGHT, m_nImgHeight);
DDX_Text(pDX, IDC_IMAGEWIDTH, m_nImgWidth);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTrainingAreaDlg, CDialog)
//{{AFX_MSG_MAP(CTrainingAreaDlg)
ON_BN_CLICKED(IDC_IMAGELIST, OnImagelist)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTrainingAreaDlg message handlers
BOOL CTrainingAreaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ClassList.InsertColumn( 1 , "名字", LVCFMT_LEFT, 60 ,0 );
m_ClassList.InsertColumn( 2 , "颜色", LVCFMT_LEFT, 60 ,0 );
m_ClassList.InsertColumn( 3 , "点数", LVCFMT_LEFT, 60 ,0 );
CImageList *pimagelist;
pimagelist = new CImageList();
HICON hIcon;
pimagelist->Create(16, 16, TRUE/*bMask*/, 1, 1);
hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
pimagelist->Add(hIcon);
m_ClassList.SetImageList(pimagelist,LVSIL_SMALL);
m_RsClassInfoFile.m_nImageHeight = m_nImgHeight;
m_RsClassInfoFile.m_nImageWidth = m_nImgWidth;
return TRUE;
}
void CTrainingAreaDlg::OnImagelist()
{
CImgListDlg ImageListDlg(this);
CString *pszTemp;
for(int i=0; i<m_RsClassInfoFile.m_nImageCount; i++)
{
pszTemp = new CString(*(CString *)(m_RsClassInfoFile.m_aImageNameArray[i]));
ImageListDlg.m_aImageArray.Add(pszTemp);
}
ImageListDlg.m_nImgHeight = m_nImgHeight;
ImageListDlg.m_nImgWidth = m_nImgWidth;
if(ImageListDlg.DoModal()==IDOK)
{
for(i=0; i<m_RsClassInfoFile.m_nImageCount; i++)
{
pszTemp = (CString *)(m_RsClassInfoFile.m_aImageNameArray[i]);
delete pszTemp;
}
m_RsClassInfoFile.m_aImageNameArray.RemoveAll();
for(i=0; i<ImageListDlg.m_aImageArray.GetSize(); i++)
{
pszTemp = new CString(*(CString *)ImageListDlg.m_aImageArray[i]);
m_RsClassInfoFile.m_aImageNameArray.Add(pszTemp);
}
m_RsClassInfoFile.m_nImageCount = ImageListDlg.m_aImageArray.GetSize();
}
}
void CTrainingAreaDlg::OnOK()
{
if(m_RsClassInfoFile.m_nImageCount==0 || m_RsClassInfoFile.m_nClassCount==0)
{
MessageBox("没有选取图象或者图象没有分类!");
return;
}
CFileDialog fileDlg(FALSE,"*.cls",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Class Info Files(*.cls)|*.cls||",this);
if(fileDlg.DoModal() == IDOK)
{
CFile File;
if(0 == File.Open(fileDlg.GetPathName(),CFile::modeCreate|CFile::modeWrite))
{
MessageBox("不能创建影象!");
return;
}
m_RsClassInfoFile.WriteTo(File);
File.Close();
}
m_pView->PostMessage(WM_COMMAND,IDD_TRAININGAREADLG,0L);
CDialog::OnOK();
}
BOOL CTrainingAreaDlg::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::Create(IDD, pParentWnd);
}
void CTrainingAreaDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
}
void CTrainingAreaDlg::OnCancel()
{
m_pView->PostMessage(WM_COMMAND,IDD_TRAININGAREADLG,0L);
CDialog::OnCancel();
}
BOOL CTrainingAreaDlg::AddTrainingArea(POINT *pptPoint,int nPointCount,CString szClassName,COLORREF clrColor)
{
int nOrder = m_RsClassInfoFile.AddTrainingRegion(pptPoint,nPointCount,szClassName,clrColor);
CRSClassInfo * pInfo = (CRSClassInfo *)(m_RsClassInfoFile.m_aClassInfoArray[nOrder]);
LV_ITEM Item;
Item.pszText = new char[64];
Item.mask = LVIF_IMAGE | LVIF_TEXT ;
Item.iItem = nOrder;
Item.iSubItem = 0;
Item.state = 0;
Item.stateMask = 0;
Item.iImage = 0;
Item.cchTextMax = 0;
strcpy(Item.pszText , pInfo->m_szClassName);
if(nOrder == m_RsClassInfoFile.m_nClassCount-1)
m_ClassList.InsertItem( &Item );
else
m_ClassList.SetItem( &Item );
Item.mask = LVIF_TEXT ;
Item.iSubItem = 1;
sprintf(Item.pszText,"(%d,%d,%d)",GetRValue(clrColor),
GetGValue(clrColor),
GetBValue(clrColor));
m_ClassList.SetItem( &Item );
Item.iSubItem = 2;
sprintf(Item.pszText,"%d",pInfo->m_nPointNumber);
m_ClassList.SetItem( &Item );
delete Item.pszText;
return TRUE;
}
void CTrainingAreaDlg::ListClassName(CPtrArray &aClassInfoArray)
{
CString *pszTemp;
CRSClassInfo *pInfo;
for(int i=0; i<m_RsClassInfoFile.m_nClassCount; i++)
{
pInfo = (CRSClassInfo *)(m_RsClassInfoFile.m_aClassInfoArray[i]);
pszTemp = new CString(pInfo->m_szClassName);
aClassInfoArray.Add(pszTemp);
}
}
/////////////////////////////////////////////////////////////////////////////
// CImgListDlg dialog
CImgListDlg::CImgListDlg(CWnd* pParent /*=NULL*/)
: CDialog(CImgListDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CImgListDlg)
m_nImgHeight = 0;
m_nImgWidth = 0;
//}}AFX_DATA_INIT
}
CImgListDlg::~CImgListDlg()
{
CString *pszTemp;
for(int i=0;i<m_aImageArray.GetSize();i++)
{
pszTemp = (CString *)m_aImageArray[i];
delete pszTemp;
}
m_aImageArray.RemoveAll();
}
void CImgListDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CImgListDlg)
DDX_Control(pDX, IDC_IMAGE_LIST, m_ImgList);
DDX_Text(pDX, IDC_IMAGEHEIGHT, m_nImgHeight);
DDX_Text(pDX, IDC_IMAGEWIDTH, m_nImgWidth);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CImgListDlg, CDialog)
//{{AFX_MSG_MAP(CImgListDlg)
ON_BN_CLICKED(IDC_BROWSEFILE, OnBrowsefile)
ON_BN_CLICKED(IDC_REMOVEIMAGE, OnRemoveimage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CImgListDlg message handlers
void CImgListDlg::OnBrowsefile()
{
CFileDialog fileDlg(TRUE,"*.dat",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Image Files(*.dat)|*.dat||",this);
if(fileDlg.DoModal() == IDOK)
{
CString *pszFileName = new CString();
*pszFileName = fileDlg.GetPathName();
CFile File;
if(0 == File.Open(*pszFileName,CFile::modeRead))
return;
if(File.GetLength() != m_nImgWidth*m_nImgHeight)
{
MessageBox("影象大小不匹配!",
"错误",
MB_OK|MB_ICONINFORMATION);
File.Close();
delete pszFileName;
return;
}
File.Close();
m_aImageArray.Add(pszFileName);
m_ImgList.AddString(*pszFileName);
m_ImgList.SetCurSel(m_aImageArray.GetSize()-1);
}
}
void CImgListDlg::OnRemoveimage()
{
int nCurSel = m_ImgList.GetCurSel();
if(nCurSel<0)
return;
CString *pszTemp;
pszTemp = (CString *)(m_aImageArray[nCurSel]);
delete pszTemp;
m_aImageArray.RemoveAt(nCurSel);
m_ImgList.DeleteString(nCurSel);
m_ImgList.SetCurSel(0);
}
BOOL CImgListDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString *pszTemp;
for(int i=0; i<m_aImageArray.GetSize(); i++)
{
pszTemp = (CString *)m_aImageArray[i];
m_ImgList.AddString(*pszTemp);
}
m_ImgList.SetCurSel(0);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -