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

📄 photostarview.cpp

📁 一些自己做的关于图象处理的程序(如傅立叶变换
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PhotoStarView.cpp : implementation of the CPhotoStarView class
//

#include "stdafx.h"
#include "PhotoStar.h"
#include "PhotoStarDoc.h"
#include "PhotoStarView.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include "Filter.h"
#include "MedFiltDlg.h"
//#include "Histogram.h"
//#include "Sgldm.h"
#include "Math.h"
//#include "Sgldmshow.h"
#include "Gray.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPhotoStarView

IMPLEMENT_DYNCREATE(CPhotoStarView, CScrollView)

BEGIN_MESSAGE_MAP(CPhotoStarView, CScrollView)
	//{{AFX_MSG_MAP(CPhotoStarView)
	ON_WM_SETFOCUS()
	ON_WM_MOUSEMOVE()
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_VIEW_SHOWHISTOGRAM, OnViewShowhistogram)
	ON_COMMAND(ID_ENHANCE_MEDIANFILTER, OnEnhanceMedianfilter)
	ON_COMMAND(ID_HISTOGRAM_BLANCE, OnHistogramBlance)
	ON_COMMAND(ID_LINERCHANGE_GRAY, OnLinerchangeGray)
	ON_COMMAND(ID_HISTOGRAM_SPECIFY, OnHistogramSpecify)
	ON_COMMAND(ID_FAKE_COLORS, OnFakeColors)
	ON_COMMAND(ID_ENHANCE_MAXFILTER, OnEnhanceMaxfilter)
	ON_COMMAND(ID_ENHANCE_MINFILTDIG, OnEnhanceMinfiltdig)
	ON_COMMAND(ID_OPERATION_ALGRBRA, OnOperationAlgrbra)
	ON_COMMAND(ID_ENHANCE_LOGICOPERATION, OnEnhanceLogicoperation)
	ON_COMMAND(ID_ENHANCE_MIRROROPERATION, OnEnhanceMirroroperation)
	ON_COMMAND(ID_ZOOMIMAGE, OnZoomimage)
	ON_COMMAND(ID_ENHANCE_FFT1, OnEnhanceFft1)
	ON_COMMAND(ID_ENHANCE_UNTIFFT, OnEnhanceUntifft)
	ON_COMMAND(ID_IDEALLOWFILTER, OnIdeallowfilter)
	ON_COMMAND(ID_IDEALHIGHTFILTER, OnIdealhightfilter)
	ON_COMMAND(ID_BUTWORTHHIGHTFILTER, OnButworthhightfilter)
	ON_COMMAND(ID_BUTWORTHLOWFILTER, OnButworthlowfilter)
	ON_COMMAND(ID_HOMOFILTER, OnHomofilter)
	ON_COMMAND(ID_PEPPERSALTNOISE, OnPeppersaltnoise)
	ON_COMMAND(ID_GUSSNOISE, OnGussnoise)
	ON_COMMAND(ID_ENHANCE_LINERFILTERDLG, OnEnhanceLinerfilterdlg)
	ON_COMMAND(ID_ENHANCE_DEGENRATION, OnEnhanceDegenration)
	ON_COMMAND(ID_ENHANCE_REVERCEFILTER, OnEnhanceRevercefilter)
	ON_COMMAND(ID_ENHANCE_VENUSFILTER, OnEnhanceVenusfilter)
	ON_COMMAND(ID_EROSION, OnErosion)
	ON_COMMAND(ID_DILATION, OnDilation)
	ON_COMMAND(ID_OPEN, OnOpen)
	ON_COMMAND(ID_CLOSE, OnClose)
	ON_COMMAND(ID_THINING, OnThining)
	ON_COMMAND(ID_THICKING, OnThicking)
	ON_COMMAND(ID_SKELETON, OnSkeleton)
	ON_COMMAND(ID_MANUALTHRESHOLD, OnManualthreshold)
	ON_COMMAND(ID_AUTOWORTH, OnAutoworth)
	ON_COMMAND(ID_REGIONGROWING, OnRegiongrowing)
	ON_COMMAND(ID_AREACOMBINE, OnAreacombine)
	ON_COMMAND(ID_ENHANCE_SELECTFILTER, OnEnhanceSelectfilter)
	ON_WM_LBUTTONUP()
	ON_COMMAND(ID_DOWNHILLFILTER, OnDownhillfilter)
	ON_COMMAND(ID_CONSTRACTALGORITHMONE, OnConstractAlgorithmOne)
	ON_COMMAND(ID_CONSTRACTALGORITHMTWO, OnConstractAlgorithmTwo)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPhotoStarView construction/destruction

CPhotoStarView::CPhotoStarView()
{
	m_pImageObject = NULL;
	m_bImageLoaded = FALSE;
	m_nangle=0;
	m_ndistance=0;
	m_nStartX=m_nStartY=0;
	m_nEndX=m_nEndY=0;
    m_nStep=0;
	
}

CPhotoStarView::~CPhotoStarView()
{

	if( m_pImageObject != NULL ) delete m_pImageObject;
}

BOOL CPhotoStarView::PreCreateWindow(CREATESTRUCT& cs)
{
	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CPhotoStarView drawing

void CPhotoStarView::OnDraw(CDC* pDC)
{

	OnPrepareDC(pDC);
	if( GetFocus() == this ) m_pImageObject->SetPalette(pDC);
	m_pImageObject->Draw(pDC);
	
}

void CPhotoStarView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CPhotoStarDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	if( !m_bImageLoaded )
	{
		CString PathName = pDoc->GetPathName();

		BeginWaitCursor ();
		m_pImageObject = new CImageObject( PathName.GetBuffer( 3 ) );
		EndWaitCursor ();

		if( m_pImageObject == NULL )
		{
			AfxMessageBox( "Could not create picture class!" );
			return;
		}
					
		CSize sizeTotal;
		sizeTotal.cx = m_pImageObject->GetWidth();
		sizeTotal.cy = m_pImageObject->GetHeight();
		SetScrollSizes (MM_TEXT, sizeTotal);

		CChildFrame *pChild = (CChildFrame *) GetParentFrame();
		pChild->m_nWidth = m_pImageObject->GetWidth(); 
		pChild->m_nHeight = m_pImageObject->GetHeight(); 
		pChild->SetWindowPos( NULL , 0, 0, 2500, 2500, SWP_NOZORDER | SWP_NOMOVE );

		m_bImageLoaded = TRUE;
	}

}

/////////////////////////////////////////////////////////////////////////////
// CPhotoStarView diagnostics

#ifdef _DEBUG
void CPhotoStarView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CPhotoStarView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CPhotoStarDoc* CPhotoStarView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPhotoStarDoc)));
	return (CPhotoStarDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CPhotoStarView message handlers

void CPhotoStarView::OnSetFocus(CWnd* pOldWnd) 
{
	CScrollView::OnSetFocus(pOldWnd);
	
	if( m_pImageObject != NULL )
	{
		CClientDC ClientDC( this );
		OnPrepareDC( &ClientDC );
		m_pImageObject->SetPalette( &ClientDC );
		m_pImageObject->Draw( &ClientDC );
	}
	
}

void CPhotoStarView::ResizeWindow( void )
{

	CSize SizeTotal;
	SizeTotal.cx = m_pImageObject->GetWidth();
	SizeTotal.cy = m_pImageObject->GetHeight();
	SetScrollSizes (MM_TEXT, SizeTotal);

	CMainFrame *pFrame = (CMainFrame *) AfxGetMainWnd();
	CChildFrame *pChild = (CChildFrame *) pFrame->MDIGetActive();
	pChild->m_nWidth = m_pImageObject->GetWidth(); 
	pChild->m_nHeight = m_pImageObject->GetHeight(); 
	pChild->SetWindowPos( NULL, 0, 0, 2500, 2500, SWP_NOZORDER | SWP_NOMOVE );
}

void CPhotoStarView::OnMouseMove(UINT nFlags, CPoint point) 
{
	CMainFrame* pFrame=(CMainFrame*) AfxGetApp()->m_pMainWnd;
	CStatusBar* pStatus=&pFrame->m_wndStatusBar;
	CString str;
	int nNumBits=m_pImageObject->GetNumBits();
	int nWidth=m_pImageObject->GetWidth();
	int nHeight=m_pImageObject->GetHeight();
	int nColor=m_pImageObject->GetNumColors();
	
	if(pStatus)
	{
		str.Format("%d×%d×%d位",nWidth,nHeight,nNumBits);
		pStatus->SetPaneText(1,str);
		str.Format("X=%4d",point.x);
		pStatus->SetPaneText(2,str);
		str.Format("Y=%4d",point.y);
		pStatus->SetPaneText(3,str);
	}

	if(nNumBits>=8)
	{
		unsigned char red,green,blue;
		m_pImageObject->GetRGBValue(point.x,point.y,red,green,blue);
		
		str.Format("R=%4d",red);
		pStatus->SetPaneText(4,str);
		str.Format("G=%4d",green);
		pStatus->SetPaneText(5,str);
		str.Format("B=%4d",blue);
		pStatus->SetPaneText(6,str);
	}
	
	if (m_nStep==1)
	{
	  CClientDC dc(this);
	  CPen NewPen1(PS_DOT,1,RGB(0,0,0));
	  CPen *pOldPen=dc.SelectObject(&NewPen1);
	  dc.SetROP2(R2_NOTXORPEN);
	  if (m_nEndX!=0)
	  {
		  dc.MoveTo(m_nStartX,m_nStartY);
		  dc.LineTo(m_nStartX,m_nEndY);
		  dc.LineTo(m_nEndX,m_nEndY);
		  dc.LineTo(m_nEndX,m_nStartY);
		  dc.LineTo(m_nStartX,m_nStartY);
	  }
	  m_nEndX=point.x;
	  m_nEndY=point.y;
	  dc.MoveTo(m_nStartX,m_nStartY);
	  dc.LineTo(m_nStartX,m_nEndY);
	  dc.LineTo(m_nEndX,m_nEndY);
	  dc.LineTo(m_nEndX,m_nStartY);
	  dc.LineTo(m_nStartX,m_nStartY);
	  dc.SelectObject(pOldPen);
	  
	}

	CScrollView::OnMouseMove(nFlags, point);
}

void CPhotoStarView::OnEditCopy() 
{
	CBitmap bitmap;
	CClientDC dc(this);
	CDC memDC;
	int nWidth=m_pImageObject->GetWidth();
	int nHeight=m_pImageObject->GetHeight();

	memDC.CreateCompatibleDC(&dc);
	bitmap.CreateCompatibleBitmap(&dc,nWidth,nHeight);
	CBitmap* pOldBitmap=memDC.SelectObject(&bitmap);
	memDC.BitBlt(0,0,nWidth,nHeight,&dc,0,0,SRCCOPY);

	OpenClipboard();
	EmptyClipboard();
	SetClipboardData(CF_BITMAP, bitmap.GetSafeHandle());
	CloseClipboard();

	memDC.SelectObject(pOldBitmap);
	bitmap.Detach();
}




void CPhotoStarView::OnLButtonDown(UINT nFlags, CPoint point) 
{

	// TODO: Add your message handler code here and/or call default
	if (m_nStep==2)
	{
		
		OnLButtonUp(0,m_nmidvalue);
		m_nStartX=m_nStartY=0;
	}
	m_nEndX=m_nEndY=0;
	m_nStartX=point.x;
	m_nStartY=point.y;
	m_nStep=1;
		
	
	/*CGray gray;
	gray.m_pImageObject=m_pImageObject;
	gray.m_x=point.x;
	gray.m_y=point.y;
	gray.DoModal();
//上面是用对话框实现RGB值输出
	CString str;
	BYTE red,green,blue;
	m_pImageObject->GetRGBValue(point.x,point.y,red,green,blue);
	str.Format("%d  %d  %d",red,green,blue);
		
	AfxMessageBox(str,MB_YESNO|MB_ICONQUESTION);
//上面是用消息框实现RGB值输出*/	
	CScrollView::OnLButtonDown(nFlags, point);
}
void CPhotoStarView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CClientDC dc(this);
	CPen NewPen1(PS_DOT,1,RGB(0,0,0));
	CPen *pOldPen=dc.SelectObject(&NewPen1);
	dc.SetROP2(R2_NOTXORPEN);
	if(m_nStep==1)
	{/*
	dc.MoveTo(m_nStartX,m_nStartY);
	dc.LineTo(m_nStartX,point.y);
	dc.LineTo(point.x,point.y);
	dc.LineTo(point.x,m_nStartY);
	dc.LineTo(m_nStartX,m_nStartY);*/
	}
	else
	{
	
    dc.MoveTo(m_nStartX,m_nStartY);
    dc.LineTo(m_nStartX,m_nEndY);
	dc.LineTo(m_nEndX,m_nEndY);
	dc.LineTo(m_nEndX,m_nStartY);
	dc.LineTo(m_nStartX,m_nStartY);
	}
	m_nStep=2;
	m_nmidvalue.x=m_nEndX;
	m_nmidvalue.y=m_nEndY;
	dc.SelectObject(pOldPen);
	

	CScrollView::OnLButtonUp(nFlags, point);
}

void CPhotoStarView::OnViewShowhistogram() 
{
  CHistogram hist;
  hist.m_pImageObject=m_pImageObject;
  if(!hist.ShowHistogram())
  {
	  return;
  }
}
	  
	


void CPhotoStarView::OnEnhanceMedianfilter() 
{
	//Display the parameter dialogue
	CMedFiltDlg dlg;
	if (dlg.DoModal() != IDOK)
	{
		return;
	}
	
	//Get user inputs from the dialogue object
	int iWinSize = dlg.m_iWinSize;
	
	//Make a filter instance
	CFilter filt(m_pImageObject, iWinSize);
	//Filter operation
	filt.MedianFilter();
	
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
	
	
}

void CPhotoStarView::OnLinerchangeGray() 
{
	CGRAYLINERCHANGE lcgray;	
	lcgray.m_pImageObject =m_pImageObject;
	lcgray.DoModal();
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();


}

void CPhotoStarView::OnHistogramBlance() 
{
	CHistogramBlance histblance;
	histblance.m_pImageObject=m_pImageObject;
	histblance.OnHistogramBlance();
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
	
}

void CPhotoStarView::OnHistogramSpecify() 
{
	CHistogramSpecify histospecify;
	histospecify.m_pImageObject=m_pImageObject;
	histospecify.OnHistogramSpecify();
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
	
	
}

void CPhotoStarView::OnFakeColors() 
{
	CColorsFake colorfake;
	colorfake.m_pImageObject=m_pImageObject;
	colorfake.OnColorsFake();
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
	
	
}

void CPhotoStarView::OnEnhanceMaxfilter() 
{
	//Display the parameter dialogue
	CMaxFiltDlg dlg;
	if (dlg.DoModal() != IDOK)
	{
		return;
	}
	
	//Get user inputs from the dialogue object
	int iWinSize = dlg.m_iWinSize;
	
	//Make a filter instance
	CFilter filt(m_pImageObject, iWinSize);
	//Filter operation
	filt.MaxFilter();
	
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
	
	
}

void CPhotoStarView::OnEnhanceMinfiltdig() 
{
	
	//Display the parameter dialogue
	CMinFiltDlg dlg;
	if (dlg.DoModal() != IDOK)
	{
		return;
	}
	
	//Get user inputs from the dialogue object
	int iWinSize = dlg.m_iWinSize;
	
	//Make a filter instance
	CFilter filt(m_pImageObject, iWinSize);
	//Filter operation
	filt.MinFilter();
	
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
}
void CPhotoStarView::OnEnhanceSelectfilter() 
{
  CFilter filter(m_pImageObject,1);
  filter.OnSelectFilter();
  //Update the window to display the filtered image
  InvalidateRect(NULL);
  UpdateWindow();	
}




void CPhotoStarView::OnOperationAlgrbra() 
{
	//Display the parameter dialogue
	CAlgebra algebra;
	if (algebra.DoModal() != IDOK)
	{
		return;
	}
	//Get user inputs from the dialogue object
	int iWinSize = algebra.m_iKind;
	int imKind=algebra.m_imKind;
	
	//Make a filter instance
	CPhotoStarDoc *doc = GetDocument();
	
	CImageOperation operation(iWinSize,imKind);
	operation.m_pImageObject1=doc->GetFirstImage();
	operation.m_pImageObject2=m_pImageObject;
	
	//Filter operation
	operation.OnAlgebraOperation();
	
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
}

void CPhotoStarView::OnEnhanceLogicoperation() 
{
	//Display the parameter dialogue
	CLogic logic;
	if (logic.DoModal() != IDOK)
	{
		return;
	}
	//Get user inputs from the dialogue object
	int imKind=logic.m_ikind;
	//Make a filter instance
	CPhotoStarDoc *doc = GetDocument();
	
	CImageOperation operation(1,imKind);
	operation.m_pImageObject1=doc->GetFirstImage();
	operation.m_pImageObject2=m_pImageObject;
	
	//Filter operation
	operation.onLogicOperation();
	
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
	
}

void CPhotoStarView::OnEnhanceMirroroperation() 
{
	
	CMirror mirror;
	if (mirror.DoModal() != IDOK)
	{
		return;
	}
	mirror.m_pImageObject=m_pImageObject;
	mirror.OnMirrorOperation();
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();
	
	
}

void CPhotoStarView::OnZoomimage() 
{    
    CZoomImage zoom;
	zoom.DoModal();
	
	
	
	zoom.m_pImageObject=m_pImageObject;
	zoom.OnZoomImage();
	m_pImageObject->Height=zoom.iNewHeight;
	
	m_pImageObject->Width=zoom.iNewWidth;
	m_pImageObject->OnChangeImageSize();

	CSize sizeTotal;
	sizeTotal.cx =zoom.iNewWidth;
	sizeTotal.cy =zoom.iNewHeight;
	SetScrollSizes (MM_TEXT, sizeTotal);	
	
	CChildFrame *pChild = (CChildFrame *) GetParentFrame();
	pChild->m_nWidth =zoom.iNewWidth; 
	pChild->m_nHeight =zoom.iNewHeight; 
	pChild->SetWindowPos( NULL , 0, 0, 2500, 2500, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);	
	//Update the window to display the filtered image
	InvalidateRect(NULL);
	UpdateWindow();

	
}

void CPhotoStarView::OnEnhanceFft1() 
{

	CFfuriour furiour;
	m_flag=-1;
	furiour.m_translatetype=1;

⌨️ 快捷键说明

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