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

📄 logdoc.cpp

📁 数学形态学提供了一种以形态或集合论为基础对图像进行分析理解的工具。可以用来去除噪声、抽取骨架、插补、分割、多分辨率分析、匹配等。 包括四个主要的算符:扩张(膨胀)○+
💻 CPP
字号:
// LogDoc.cpp : implementation of the CLogDoc class
//

#include "stdafx.h"
#include "Log.h"

#include "LogDoc.h"

#include "WrapBitmap.h"
#include "Filter.h"
#include "SettingDlg.h"
#include "Morphology.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLogDoc

IMPLEMENT_DYNCREATE(CLogDoc, CDocument)

BEGIN_MESSAGE_MAP(CLogDoc, CDocument)
	//{{AFX_MSG_MAP(CLogDoc)
	ON_COMMAND(ID_FILTER_LOG, OnFilterLog)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_FILTER_LAP, OnFilterLap)
	ON_COMMAND(ID_FILTER_GAUSS, OnFilterGauss)
	ON_COMMAND(ID_COLOR_YUZHI, OnColorYuzhi)
	ON_COMMAND(ID_MORPH_DILATE, OnMorphDilate)
	ON_COMMAND(ID_MORPH_ERODE, OnMorphErode)
	ON_COMMAND(ID_MORPH_SKELETON, OnMorphSkeleton)
	ON_COMMAND(ID_MORPH_OPEN, OnMorphOpen)
	ON_COMMAND(ID_MORPH_THINNING, OnMorphThinning)
	ON_COMMAND(ID_COLOR_SHAPE, OnColorShape)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLogDoc construction/destruction

CLogDoc::CLogDoc()
{
	// TODO: add one-time construction code here
}

CLogDoc::~CLogDoc()
{
}

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

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CLogDoc serialization

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

/////////////////////////////////////////////////////////////////////////////
// CLogDoc diagnostics

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

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

/////////////////////////////////////////////////////////////////////////////
// CLogDoc commands

CWrapBitmap* CLogDoc::GetWrapBitmap()
{
	return &m_WrapBitmap;
}

BOOL CLogDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	
	if(m_WrapBitmap.Load(lpszPathName))
		return TRUE;
	else
		return FALSE;
}


BOOL CLogDoc::OnSaveDocument(LPCTSTR lpszPathName) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	//return CDocument::OnSaveDocument(lpszPathName);
	return m_WrapBitmap.Save(lpszPathName);
}


void CLogDoc::OnFilterLog() 
{
	StartFilter(TEMPLATE_LOG);
}

void CLogDoc::OnFilterLap() 
{
	StartFilter(TEMPLATE_LAPLACIAN);
}

void CLogDoc::OnFileSave() 
{
	m_WrapBitmap.Save("c:\\1.bmp");	
}

BOOL CLogDoc::StartFilter(const int nType)
{
	BYTE* bmpBuffer;
	bmpBuffer=m_WrapBitmap.GetpBuffer();
	if(!bmpBuffer)
		return false;
	
	
	CFilter filter;
	if(!filter.Filter(nType,bmpBuffer,m_WrapBitmap.GetSize(),m_WrapBitmap.GetWidthBytes(),m_WrapBitmap.GetHeight()))
	{
		AfxMessageBox("图像滤波出错");
	}
	else
	{
		m_WrapBitmap.GetpBitmap()->SetBitmapBits(m_WrapBitmap.GetSize(),bmpBuffer);
		POSITION p=GetFirstViewPosition();
		CView* pView=GetNextView(p);//再打开一个view
		pView->RedrawWindow();	//
	}
	TRACE("%ld",filter.GetCount());
	return true;
}

void CLogDoc::OnFilterGauss() 
{
	StartFilter(TEMPLATE_GAUSS);	
}


void CLogDoc::OnColorYuzhi() 
{
	m_WrapBitmap.YuZhi(125);
	POSITION p=GetFirstViewPosition();
	CView* pView=GetNextView(p);//再打开一个view
	pView->RedrawWindow();

}



void CLogDoc::OnMorphDilate() 
{
	BYTE* bmpBuffer;
	bmpBuffer=m_WrapBitmap.GetpBuffer();
	if(!bmpBuffer)
	{
		TRACE("位图指针出错\n");
		return;
	}
		
	CMorphology Morph;
	if(!Morph.Dilate(bmpBuffer,NULL,SE_SQUARE,m_WrapBitmap.GetWidthBytes(),m_WrapBitmap.GetHeight()))
	{
		AfxMessageBox("图像形态学计算出错");
	}
	else
	{
		m_WrapBitmap.GetpBitmap()->SetBitmapBits(m_WrapBitmap.GetSize(),bmpBuffer);
		POSITION p=GetFirstViewPosition();
		CView* pView=GetNextView(p);//再打开一个view
		pView->RedrawWindow();	//刷新
	}

}

void CLogDoc::OnMorphErode() 
{
	BYTE* bmpBuffer;
	bmpBuffer=m_WrapBitmap.GetpBuffer();
	if(!bmpBuffer)
	{
		TRACE("位图指针出错\n");
		return;
	}
		
	CMorphology Morph;
	if(!Morph.Erode(bmpBuffer,NULL,SE_SQUARE,m_WrapBitmap.GetWidthBytes(),m_WrapBitmap.GetHeight()))
	{
		AfxMessageBox("图像形态学计算出错");
	}
	else
	{
		m_WrapBitmap.GetpBitmap()->SetBitmapBits(m_WrapBitmap.GetSize(),bmpBuffer);
		POSITION p=GetFirstViewPosition();
		CView* pView=GetNextView(p);//再打开一个view
		pView->RedrawWindow();	//刷新
	}

	
}

void CLogDoc::OnMorphSkeleton() 
{
	BYTE* bmpBuffer;
	bmpBuffer=m_WrapBitmap.GetpBuffer();
	if(!bmpBuffer)
	{
		TRACE("位图指针出错\n");
		return;
	}
		
	CMorphology Morph;
	if(!Morph.Skeleton(bmpBuffer,SE_SQUARE,m_WrapBitmap.GetWidthBytes(),m_WrapBitmap.GetHeight()))
	{
		AfxMessageBox("图像形态学计算出错");
	}
	else
	{
		m_WrapBitmap.GetpBitmap()->SetBitmapBits(m_WrapBitmap.GetSize(),bmpBuffer);
		POSITION p=GetFirstViewPosition();
		CView* pView=GetNextView(p);//再打开一个view
		pView->RedrawWindow();	//刷新
	}
	
}

void CLogDoc::OnMorphOpen() 
{
	BYTE* bmpBuffer;
	bmpBuffer=m_WrapBitmap.GetpBuffer();
	if(!bmpBuffer)
	{
		TRACE("位图指针出错\n");
		return;
	}
		
	CMorphology Morph;
	if(!Morph.Open(bmpBuffer,NULL,SE_SQUARE,m_WrapBitmap.GetWidthBytes(),m_WrapBitmap.GetHeight()))
	{
		AfxMessageBox("图像形态学计算出错");
	}
	else
	{
		m_WrapBitmap.GetpBitmap()->SetBitmapBits(m_WrapBitmap.GetSize(),bmpBuffer);
		POSITION p=GetFirstViewPosition();
		CView* pView=GetNextView(p);//再打开一个view
		pView->RedrawWindow();	//刷新
	}
	
}

void CLogDoc::OnMorphThinning() 
{
	BYTE* bmpBuffer;
	bmpBuffer=m_WrapBitmap.GetpBuffer();
	if(!bmpBuffer)
	{
		TRACE("位图指针出错\n");
		return;
	}
		
	CMorphology Morph;
	if(!Morph.Thinning(bmpBuffer,m_WrapBitmap.GetWidthBytes(),m_WrapBitmap.GetHeight()))
	{
		AfxMessageBox("图像形态学计算出错");
	}
	else
	{
		m_WrapBitmap.GetpBitmap()->SetBitmapBits(m_WrapBitmap.GetSize(),bmpBuffer);
		POSITION p=GetFirstViewPosition();
		CView* pView=GetNextView(p);//再打开一个view
		pView->RedrawWindow();	//刷新
	}
}

void CLogDoc::OnColorShape() 
{
	
}

⌨️ 快捷键说明

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