📄 rsipview.cpp
字号:
// RSIPView.cpp : implementation of the CRSIPView class
//
#include "stdafx.h"
#include "RSIP.h"
#include "MainFrm.h"
#include "RSIPDoc.h"
#include "RSIPView.h"
#include "RotateDlg.h"
#include "Progress.h"
#include "lib\\Comput.h"
#include "ImgFunction.h"
#include "CalcultateImgDlg.h"
#include "GeneralPage.h"
#include "HistogramDlg.h"
#include "ClassInfoDlg.h"
#include "ClassifyInfoDlg.h"
#include "ThresholdDlg.h"
#include "FilterDlg.h"
#include "UserDefFilterDlg.h"
#include "SelfClusterDlg.h"
#include "EqualMixedDistDlg.h"
#include "ClassifyInfoDlg.h"
#include "FreeStrechDlg.h"
#include "KLTransformDlg.h"
#include "GeoCorPage.h"
#include "RadiationCorrectDlg.h"
#include "KeyCutImg.h"
#include "WaveletTransformDlg.h"
#include "WaveletTransform.h"
#include "CustHistogramDlg.h"
#include "MADDialog.h"
#include "Statistic.h"
#include "math.h"
#include "removeLayerDlg.h"
#include "waveEditDlg.h"
#include "filterfuseDlg.h"
#include "GeneralPage.h"
#include "openWaveletFileDlg.h"
#include "stdlib.h"
#include "comput.h"
#include "textSpanDlg.h"
#include "RSIPTic.h"
#define DEFSAMRATE 4
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRSIPView
IMPLEMENT_DYNCREATE(CRSIPView, CScrollView)
BEGIN_MESSAGE_MAP(CRSIPView, CScrollView)
//{{AFX_MSG_MAP(CRSIPView)
ON_COMMAND(ID_IMAGE_CIRCLE, OnImageCircle)
ON_COMMAND(ID_IMAGE_CLASSIFYINFO, OnImageClassifyinfo)
ON_COMMAND(ID_IMAGE_COMBINE, OnImageCombine)
ON_COMMAND(ID_IMAGE_HISTOGRAM, OnImageHistogram)
ON_COMMAND(ID_IMAGE_INFOMATION, OnImageInfomation)
ON_COMMAND(ID_IMAGE_RESAMPLE, OnImageResample)
ON_COMMAND(ID_IMAGE_HFLIP, OnImageHflip)
ON_COMMAND(ID_IMAGE_VFLIP, OnImageVflip)
ON_COMMAND(ID_IMAGE_IHSDECOMPOSE, OnImageIhsdecompose)
ON_COMMAND(ID_IMAGE_RGBDECOMPOSE, OnImageRgbdecompose)
ON_COMMAND(ID_IMAGE_CALCULATE, OnImageCalculate)
ON_COMMAND(ID_IMAGE_POWERINFO, OnImagePowerinfo)
ON_COMMAND(ID_IMAGE_REVERT, OnImageRevert)
ON_COMMAND(ID_IMAGE_EQUUALIZE, OnImageEquualize)
ON_COMMAND(ID_IMAGE_THRESHOLD, OnImageThreshold)
ON_COMMAND(ID_IMAGE_POSTERIZE, OnImagePosterize)
ON_COMMAND(ID_FILTER_FILTER, OnFilterFilter)
ON_COMMAND(ID_FILTER_POWER, OnFilterPower)
ON_COMMAND(ID_FILTER_EDEGE, OnFilterEdege)
ON_COMMAND(ID_FILTER_SHARPEN, OnFilterSharpen)
ON_COMMAND(ID_FILTER_AUTO, OnFilterAuto)
ON_COMMAND(ID_CLASS_CHARACTER, OnClassCharacter)
ON_COMMAND(ID_CLASS_FISHERRULE, OnClassFisherrule)
ON_COMMAND(ID_CLASS_ISODISTANCE, OnClassIsodistance)
ON_COMMAND(ID_CLASS_MAXLIKENESS, OnClassMaxlikeness)
ON_COMMAND(ID_CLASS_MINIDISTANCE, OnClassMinidistance)
ON_COMMAND(ID_CLASS_PRACTICEREGION, OnClassPracticeregion)
ON_COMMAND(ID_CLASS_END_PRACTICEREGION, OnClassEndPracticeRegion)
ON_COMMAND(ID_CLASS_SELFORGANIZE, OnClassSelforganize)
ON_COMMAND(ID_CLASS_STEPCLUSTER, OnClassStepcluster)
ON_WM_KEYDOWN()
ON_COMMAND(ID_VIEW_PAN, OnViewPan)
ON_COMMAND(ID_VIEW_WHOLEIMAGE, OnViewWholeimage)
ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin)
ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_VIEW_FITWINDOW, OnViewFitwindow)
ON_COMMAND(ID_PRE_HISTOTRANS, OnPreHistotrans)
ON_COMMAND(ID_PRE_KAIRWENTRANS, OnPreKairwentrans)
ON_COMMAND(IDC_PRE_PICKGCP, OnPrePickgcp)
ON_COMMAND(IDC_END_PICKGCP, OnEndPickgcp)
ON_COMMAND(IDC_PRE_GEOCORRECT, OnPreGeocorrect)
ON_COMMAND(ID_PRE_RADIATION, OnPreRadiation)
ON_COMMAND(ID_SPLIT_MOUSE, OnSplitMouse)
ON_COMMAND(IDC_DRAWGCP,OnDrawGcp)
ON_COMMAND(IDC_REFRESH,OnRefresh)
ON_COMMAND(IDC_NORMAL,OnNormal)
ON_WM_SETCURSOR()
ON_UPDATE_COMMAND_UI(IDC_NORMAL, OnUpdateNormal)
ON_UPDATE_COMMAND_UI(ID_VIEW_ZOOMIN, OnUpdateViewZoomin)
ON_UPDATE_COMMAND_UI(ID_VIEW_ZOOMOUT, OnUpdateViewZoomout)
ON_UPDATE_COMMAND_UI(ID_VIEW_PAN, OnUpdateViewPan)
ON_UPDATE_COMMAND_UI(ID_SPLIT_MOUSE, OnUpdateSplitMouse)
ON_UPDATE_COMMAND_UI(IDC_PRE_PICKGCP, OnUpdatePrePickgcp)
ON_UPDATE_COMMAND_UI(ID_CLASS_PRACTICEREGION, OnUpdateClassPracticeregion)
ON_COMMAND(IDC_PRE_REGISTER, OnPreRegister)
ON_COMMAND(ID_PRE_KEYCUTIMG, OnPreKeycutimg)
ON_COMMAND(ID_WAVELET_TRANSFORM, OnWaveletTransform)
ON_COMMAND(ID_REVERSE_WAVELET, OnReverseWavelet)
ON_COMMAND(ID_CUSTOMIZE_HISTOGRAM, OnCustomizeHistogram)
ON_COMMAND(ID_STATIS_RELATION, OnStatisRelation)
ON_COMMAND(ID_PRE_LOCALCOPY, OnPreLocalcopy)
ON_COMMAND(ID_TRANS_LOCALPASTE, OnTransLocalpaste)
ON_COMMAND(ID_STATIS_ENTROPY, OnStatisEntropy)
ON_COMMAND(ID_STATIS_DISTORT, OnStatisDistort)
ON_COMMAND(ID_STATIS_AVERAGEGRAD, OnStatisAveragegrad)
ON_COMMAND(ID_STATIS_ENERGY, OnStatisEnergy)
ON_COMMAND(ID_STATIS_CORREL, OnStatisCorrel)
ON_COMMAND(ID_TRANS_LC, OnTransLinghtContrast)
ON_COMMAND(ID_TRANS_EVCUSTOM, OnTransEvcustom)
ON_COMMAND(ID_TRANS_WEIGHT, OnTransWeight)
ON_COMMAND(ID_PRE_EDGEDETCT, OnPreEdgedetct)
ON_COMMAND(ID_TRANS_COFSELECT, OnTransCoefselect)
ON_COMMAND(ID_TRANS_ADDCOEFF, OnTransAddcoeff)
ON_COMMAND(ID_PRE_INVKLTRANSFORM, OnPreInvkltransform)
ON_COMMAND(ID_STATIS_FILTER, OnStatisFilter)
ON_COMMAND(ID_PRE_MADTRANSFORM, OnPreMadtransform)
ON_COMMAND(ID_TRANS_HIGH, OnTransRemoveLayer)
ON_COMMAND(ID_TRANS_RETAIN, OnTransRetainLayer)
ON_COMMAND(ID_TRANS_EDIT, OnTransEditWaveLayer)
ON_COMMAND(ID_SELECT_TEXTURE, OnSelectTexture)
ON_COMMAND(ID_FILTER_FUSE, OnFilterFuse)
ON_COMMAND(ID_SELECT_TEXTURE_FIVE, OnSelectTextureFive)
ON_COMMAND(ID_WAVELET_SOFT_THESHOLD, OnWaveletSoftTheshold)
ON_COMMAND(ID_WAVELET_SN_DIVIDE, OnWaveletSNDivide)
ON_COMMAND(ID_WAVELET_NOISE_THRESHOLD, OnWaveletNoiseThreshold)
ON_COMMAND(ID_TEST, OnTest)
ON_COMMAND(ID_READ_TEXT, OnReadText)
ON_COMMAND(ID_WRITE_TEXT, OnWriteText)
ON_COMMAND(ID_SELECT_TEXTURE_DIV, OnSelectTextureDiv)
ON_COMMAND(ID_SELECT_TEXTURE_REGION, OnSelectTextureRegion)
ON_COMMAND(ID_GET_NOISE, OnGetNoise)
ON_COMMAND(ID_GET_NOISE_TEXTURE, OnGetNoiseTexture)
ON_COMMAND(ID_SELECT_TEXTURE_SOFT, OnSelectTextureSoft)
ON_COMMAND(ID_SELECT_TEXTURE_SOFT_RIPE, OnSelectTextureSoft2)
ON_COMMAND(ID_SELECT_TEXTURE_CUSTOM, OnSelectTextureCustom)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRSIPView construction/destruction
CRSIPView::CRSIPView()
{
m_nMouseAction = MOUSE_NOTHING;
m_pClassInfoDlg = NULL;
m_pPickGCPDlg = NULL;
m_bTrace = FALSE;
m_nStartPoint = CPoint(0,0);
m_nEndPoint = CPoint(0,0);
m_aPointArray.RemoveAll();
}
CRSIPView::~CRSIPView()
{
CPoint * pPnt = NULL;
for(int i=0; i<m_aPointArray.GetSize(); i++)
{
pPnt = (CPoint *)m_aPointArray.GetAt(i);
ASSERT(pPnt != NULL);
delete pPnt;
}
m_aPointArray.RemoveAll();
if(m_pClassInfoDlg != NULL)
{
m_pClassInfoDlg->DestroyWindow();
delete m_pClassInfoDlg;
}
if(m_pPickGCPDlg != NULL)
{
m_pPickGCPDlg->DestroyWindow();
delete m_pPickGCPDlg;
}
}
BOOL CRSIPView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CRSIPView drawing
void CRSIPView::OnDraw(CDC* pDC)
{
CRSIPDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(NULL!=pDoc->m_pRSImage &&
NULL!=pDoc->m_pRSImage->m_pImgData)
{
pDoc->m_pRSImage->Draw(pDC,0,0,pDoc->m_dZoomedRatio);
OnDrawGcp();
OnDrawPracticeRegion();
}
}
/////////////////////////////////////////////////////////////////////////////
// CRSIPView printing
BOOL CRSIPView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CRSIPView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CRSIPView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CRSIPView diagnostics
#ifdef _DEBUG
void CRSIPView::AssertValid() const
{
CScrollView::AssertValid();
}
void CRSIPView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CRSIPDoc* CRSIPView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRSIPDoc)));
return (CRSIPDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CRSIPView message handlers
void CRSIPView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize totalSize(640,480);
SetScrollSizes(MM_TEXT,totalSize);
}
void CRSIPView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
switch(nChar)
{
case VK_UP:
OnVScroll(SB_LINEUP,0,NULL);
break;
case VK_DOWN:
OnVScroll(SB_LINEDOWN,0,NULL);
break;
case VK_LEFT:
OnHScroll(SB_LINELEFT,0,NULL);
break;
case VK_RIGHT:
OnHScroll(SB_LINERIGHT,0,NULL);
break;
case VK_HOME:
OnVScroll(SB_TOP,0,NULL);
OnHScroll(SB_LEFT,0,NULL);
break;
case VK_END:
OnVScroll(SB_BOTTOM,0,NULL);
OnHScroll(SB_RIGHT,0,NULL);
break;
case VK_PRIOR:
OnVScroll(SB_PAGEUP,0,NULL);
break;
case VK_NEXT:
OnVScroll(SB_PAGEDOWN,0,NULL);
break;
default:
CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}
}
void CRSIPView::OnImageCircle()
{
CRSIPDoc * pDoc = GetDocument();
ASSERT(pDoc != NULL);
if(pDoc->m_pRSImage!=NULL &&
pDoc->m_pRSImage->m_pImgData!=NULL)
{
CRotateDlg rotateDlg;
if(rotateDlg.DoModal() == IDOK)
{
bool flag;
if(rotateDlg.m_nDirection == 0)
flag = FALSE; //顺时针
else
flag = TRUE; //逆时针
float degree = rotateDlg.m_fDegree;
pDoc->m_pRSImage->Rotate(degree,flag);
pDoc->UpdateAllViews(NULL);
pDoc->m_bModifiedFlag = TRUE;
pDoc->m_bHistogramModified = TRUE;
}
}
}
void CRSIPView::OnImageClassifyinfo()
{
CRSIPDoc * pDoc = (CRSIPDoc *)GetDocument();
ASSERT(pDoc != NULL);
if(pDoc->m_pRSImage!=NULL &&
pDoc->m_pRSImage->m_pImgData!=NULL)
{
// 将类别信息结构指针移到对话框的数组中去
int classNum = pDoc->m_pRSImage->m_nClassNumber;
CRsThematicInfo * pInfo = NULL;
CClassifyInfoDlg classifyInfoDlg(this);
for(int i=0; i<classNum; i++)
{
pInfo = pDoc->m_pRSImage->m_aThemeInfoArray.GetAt(i);
ASSERT(pInfo != NULL);
classifyInfoDlg.m_aClassifyInfoArray.Add(pInfo);
pInfo = NULL;
}
// 修改类别信息的数目
if(classifyInfoDlg.DoModal()==IDOK)
{
pDoc->m_pRSImage->m_nClassNumber =
classifyInfoDlg.m_aClassifyInfoArray.GetSize();
}
}
}
void CRSIPView::OnImageCombine()
{
CRSIPDoc * pDoc=(CRSIPDoc *)GetDocument();
ASSERT(pDoc!=NULL);
CImgCombineDlg combineDlg;
if(combineDlg.DoModal()==IDOK)
{
int height=combineDlg.m_nImgHeight;
int width=combineDlg.m_nImgWidth;
int combineMethod = combineDlg.m_nMethod;
CString pathname[3];
pathname[0]=combineDlg.m_szRedBand; //红
pathname[1]=combineDlg.m_szGreenBand; //绿
pathname[2]=combineDlg.m_szBlueBand; //蓝
DWORD dwSize = height*width;
LPBYTE ppData[3] = {NULL,NULL,NULL};
ppData[0] = (LPBYTE)new BYTE[dwSize]; //红
ppData[1] = (LPBYTE)new BYTE[dwSize]; //绿
ppData[2] = (LPBYTE)new BYTE[dwSize]; //蓝
if(ppData[0]==NULL || ppData[1]==NULL || ppData[2]==NULL)
{
AfxMessageBox("内存不足,无法完成操作!");
for(int l=0; l<3; l++)
{
if(ppData[l]!=NULL)
{
delete ppData[l];
ppData[l] = NULL;
}
}
return;
}
CFile file[3];
for(int i=0; i<3; i++)
{
if(0!=file[i].Open(pathname[i],CFile::modeRead))
{
file[i].ReadHuge(ppData[i],dwSize);
file[i].Close();
}
else
{
AfxMessageBox("无法打开文件!");
return;
}
}
DWORD bmpCol = (3*width+3)/4*4;
BYTE * pData=(LPBYTE)new BYTE[bmpCol*height];
if(pData == NULL)
{
AfxMessageBox("内存不足,无法完成操作!");
for(int l=0; l<3; l++)
{
if(ppData[l]!=NULL)
{
delete ppData[l];
ppData[l] = NULL;
}
}
return;
}
else
{
for(DWORD a=0; a<bmpCol*height; a++)
pData[a] = 0;
}
if(combineMethod == 0)
for(i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
pData[i*bmpCol+3*j] = ppData[0][(height-i-1)*width+j];
pData[i*bmpCol+3*j+1] = ppData[1][(height-i-1)*width+j];
pData[i*bmpCol+3*j+2] = ppData[2][(height-i-1)*width+j];
}
}
else if(combineMethod == 1)
for(i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
BYTE rgb[3];
::GetRGB(rgb,ppData[0][(height-i-1)*width+j],
ppData[1][(height-i-1)*width+j],ppData[2][(height-i-1)*width+j]);
pData[i*bmpCol+3*j] = rgb[2];
pData[i*bmpCol+3*j+1] = rgb[1];
pData[i*bmpCol+3*j+2] = rgb[0];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -