📄 abrasionmeasurementview.cpp
字号:
// AbrasionMeasurementView.cpp : implementation of the CAbrasionMeasurementView class
//
#include "stdafx.h"
#include "AbrasionMeasurement.h"
#include "AbrasionMeasurementDoc.h"
#include "AbrasionMeasurementView.h"
#include "GlobalApi.h"
#include "DlgRecMatch.h"
#include "Thinning.h"
#include <complex>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAbrasionMeasurementView
IMPLEMENT_DYNCREATE(CAbrasionMeasurementView, CScrollView)
BEGIN_MESSAGE_MAP(CAbrasionMeasurementView, CScrollView)
//{{AFX_MSG_MAP(CAbrasionMeasurementView)
//ON_COMMAND(ID_EDGE_CANNY, OnEdgeCanny)
//}}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)
ON_COMMAND(ID_32836, &CAbrasionMeasurementView::OnEdgeLaplace)
ON_COMMAND(ID_32837, &CAbrasionMeasurementView::OnEdgePrewitt)
ON_COMMAND(ID_32838, &CAbrasionMeasurementView::OnSobel)
ON_COMMAND(ID_32839, &CAbrasionMeasurementView::OnCanny)
ON_COMMAND(ID_32834, &CAbrasionMeasurementView::OnMicro)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAbrasionMeasurementView construction/destruction
CAbrasionMeasurementView::CAbrasionMeasurementView()
{
// 为小波变换设置的参数
// 临时存放小波变换系数内存
m_pDbImage = NULL;
// 设置当前层数
m_nDWTCurDepth = 0;
// 设置小波基紧支集长度
m_nSupp = 1;
}
CAbrasionMeasurementView::~CAbrasionMeasurementView()
{
// 释放已分配内存
if(m_pDbImage){
delete[]m_pDbImage;
m_pDbImage = NULL;
}
}
BOOL CAbrasionMeasurementView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CAbrasionMeasurementView drawing
void CAbrasionMeasurementView::OnDraw(CDC* pDC)
{
CAbrasionMeasurementDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CSize sizeDibDisplay;
if(!pDoc->m_pDibInit->IsEmpty()){
sizeDibDisplay = pDoc->m_pDibInit->GetDimensions();
pDoc->m_pDibInit->Draw(pDC,CPoint(0,0),sizeDibDisplay);
}
}
void CAbrasionMeasurementView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CAbrasionMeasurementDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CSize sizeTotal = pDoc->m_pDibInit->GetDimensions();
SetScrollSizes(MM_TEXT, sizeTotal);
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
/////////////////////////////////////////////////////////////////////////////
// CAbrasionMeasurementView printing
BOOL CAbrasionMeasurementView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CAbrasionMeasurementView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CAbrasionMeasurementView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CAbrasionMeasurementView diagnostics
#ifdef _DEBUG
void CAbrasionMeasurementView::AssertValid() const
{
CScrollView::AssertValid();
}
void CAbrasionMeasurementView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CAbrasionMeasurementDoc* CAbrasionMeasurementView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAbrasionMeasurementDoc)));
return (CAbrasionMeasurementDoc*)m_pDocument;
}
#endif //_DEBUG
/*************************************************************************
*
* \函数名称:
* OnRegReg()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数实现图象的配准
*
*************************************************************************
*/
/* void CAbrasionMeasurementView::OnRegReg()
{
// 获得文档类句柄
CAbrasionMeasurementDoc* pDoc;
pDoc = GetDocument();
// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的水平镜像,其它的可以类推)
if(pDoc->m_pDibInit->m_nColorTableEntries != 256)
{
// 提示用户
MessageBox("目前只支持256色位图的图象配准!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 打开图象配准对话框
CDlgReg* pDlg=new CDlgReg(NULL,pDoc);
pDlg->DoModal();
delete pDlg;
}
*/
/*************************************************************************
*
* \函数名称:
* OnEnhanceSharp()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 该函数利用Laplacian算子实现图象的锐化
*
*************************************************************************
*/
/*
void CAbrasionMeasurementView::OnEnhanceSharp()
{
//更改光标形状
BeginWaitCursor();
CAbrasionMeasurementDoc * pDoc = (CAbrasionMeasurementDoc *)this->GetDocument();
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 循环控制变量
int y;
int x;
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight= sizeImage.cy ;
int nSaveWidth = pDib->GetDibSaveDim().cx;
// 开辟内存,存储图象数据,该数据的存储不是DWORD对齐的
unsigned char * pUnchImage = new unsigned char[nWidth*nHeight];
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pUnchImage[y*nWidth+x] = pDib->m_lpImage[y*nSaveWidth+x];
}
}
// 调用LinearSharpen函数进行图象锐化增强
LinearSharpen(pUnchImage, nWidth, nHeight) ;
// 增强以后的图象拷贝到pDib中,进行显示
for(y=0; y<nHeight; y++)
{
for(x=0; x<nWidth; x++)
{
pDib->m_lpImage[y*nSaveWidth+x] = pUnchImage[y*nWidth+x];
}
}
// 释放内存
delete []pUnchImage;
pUnchImage = NULL ;
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
*/
/*************************************************************************
*
* \函数名称:
* OnEdgeSobel()
*
* \输入参数:
* 无
*
* \返回值:
* 无
*
* \说明:
* 实现Sobel算子
*
************************************************************************
*/
void CAbrasionMeasurementView::OnSobel()
{
// TODO: Add your command handler code here
//更改光标形状
BeginWaitCursor();
// 循环控制变量
int y;
int x;
CAbrasionMeasurementDoc * pDoc = (CAbrasionMeasurementDoc *)this->GetDocument();
pDoc->OnFileReload1();//reload 提取前图像
CDib * pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 图象的长宽大小
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight = sizeImage.cy ;
// 指向梯度数据的指针
double * pdGrad;
// 按照图像的大小开辟内存空间,存储梯度计算的结果
pdGrad=new double[nHeight*nWidth];
//图像数据的指针
LPBYTE lpImage = pDib->m_lpImage;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -