www.pudn.com > pict.rar > ImageMeasureDoc.cpp


// ImageMeasureDoc.cpp : implementation of the CImageMeasureDoc class 
// 
 
#include "stdafx.h" 
#include "ImageMeasure.h" 
#include  
 
#include "ImageMeasureDoc.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageMeasureDoc 
 
IMPLEMENT_DYNCREATE(CImageMeasureDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CImageMeasureDoc, CDocument) 
	//{{AFX_MSG_MAP(CImageMeasureDoc) 
	ON_COMMAND(ID_MIDFILTER, OnMidfilter) 
	ON_COMMAND(ID_SHARP, OnSharp) 
	ON_COMMAND(ID_MAX, OnMax) 
	ON_COMMAND(ID_MIN, OnMin) 
	ON_COMMAND(ID_ROBERTS, OnRoberts) 
	ON_COMMAND(ID_PREWITT, OnPrewitt) 
	ON_COMMAND(ID_SOBEL, OnSobel) 
	ON_COMMAND(ID_KIRSCH, OnKirsch) 
	ON_COMMAND(ID_TWO, OnTwo) 
	ON_COMMAND(ID_XIHUA, OnXihua) 
	ON_COMMAND(ID_MIANJI, OnMianji) 
	ON_COMMAND(ID_SMOOTH, OnSmooth) 
	ON_COMMAND(ID_LENGTH, OnLength) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageMeasureDoc construction/destruction 
 
CImageMeasureDoc::CImageMeasureDoc() 
{ 
	pBits = NULL; 
	// TODO: add one-time construction code here 
 
} 
 
CImageMeasureDoc::~CImageMeasureDoc() 
{ 
} 
 
BOOL CImageMeasureDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageMeasureDoc serialization 
 
void CImageMeasureDoc::Serialize(CArchive& ar) 
{ 
	if (ar.IsStoring()) 
	{ 
		// TODO: add storing code here 
	} 
	else 
	{ 
		// TODO: add loading code here 
	} 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageMeasureDoc diagnostics 
 
#ifdef _DEBUG 
void CImageMeasureDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CImageMeasureDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageMeasureDoc commands 
 
BOOL CImageMeasureDoc::OnOpenDocument(LPCTSTR lpszPathName)  
{ 
	if (!CDocument::OnOpenDocument(lpszPathName)) 
	{ 
		AfxMessageBox("open failed"); 
		return FALSE; 
	} 
 
	HBITMAP hbitmap = (HBITMAP)::LoadImage(NULL,lpszPathName,IMAGE_BITMAP, 
		        0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE); 
	if( hbitmap==NULL) 
	{ 
		AfxMessageBox("The file doesn't contain a dib"); 
		return false; 
	} 
	m_Bitmap.Attach(hbitmap); 
	if((HBITMAP)m_Bitmap!=NULL) 
	{ 
		DIBSECTION dib; 
		m_Bitmap.GetObject(sizeof(DIBSECTION),&dib); 
		m_lWidth = dib.dsBmih.biWidth; 
		m_lHeight = dib.dsBmih.biHeight; 
		pBits = (unsigned char *)dib.dsBm.bmBits; 
 
	    m_Color = dib.dsBmih.biBitCount; 
 
	switch(m_Color) 
	{ 
	case(8): 
		WIDTH = (m_lWidth + 3)/4; 
		WIDTH *=4; 
		break; 
	case(24): 
		WIDTH = (m_lWidth*3 +3)/4; 
		WIDTH *=4; 
		break; 
	default: 
		break; 
	} 
	} 
 
 
 
	 
	// TODO: Add your specialized creation code here 
	 
	return TRUE; 
} 
 
BOOL CImageMeasureDoc::OnSaveDocument(LPCTSTR lpszPathName)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	if((HBITMAP) m_Bitmap!=NULL) 
	{ 
		BITMAPFILEHEADER bmfHdr;   //BMP文件头 
 
		DWORD dwDIBsize=0;           //DIB大小 
 
		DIBSECTION ds; 
		m_Bitmap.GetObject(sizeof(DIBSECTION),&ds); 
		LPBITMAPINFOHEADER lpBI; 
		lpBI=&ds.dsBmih; 
 
		dwDIBsize+=sizeof(BITMAPINFOHEADER); 
		if(m_Color==8) 
		{ 
			dwDIBsize+=DWORD(sizeof(RGBQUAD)*pow(2,8)); 
		} 
		dwDIBsize+=WIDTH*m_lHeight; 
 
		bmfHdr.bfType=0x4D42; 
		bmfHdr.bfSize=dwDIBsize+sizeof(BITMAPFILEHEADER); 
		bmfHdr.bfReserved1=0; 
		bmfHdr.bfReserved2=0; 
		bmfHdr.bfOffBits=bmfHdr.bfSize-WIDTH*m_lHeight; 
 
		unsigned char* pBmpFile=new unsigned char[dwDIBsize+sizeof(BITMAPFILEHEADER)]; 
		memcpy(pBmpFile,&bmfHdr,sizeof(BITMAPFILEHEADER)); 
		memcpy(pBmpFile+sizeof(BITMAPFILEHEADER),lpBI,sizeof(BITMAPINFOHEADER)); 
		if(m_Color==8) 
		{ 
			CClientDC dc(NULL); 
			RGBQUAD* pRGB = new RGBQUAD[256]; 
 
            CDC memDC; 
            memDC.CreateCompatibleDC (&dc); 
            CBitmap* pOldBitmap = memDC.SelectObject (&m_Bitmap); 
            ::GetDIBColorTable ((HDC) memDC, 0, 256, pRGB); 
            memDC.SelectObject (pOldBitmap); 
		    memcpy(pBmpFile+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER),pRGB, 
				    sizeof(RGBQUAD)*256); 
			delete [] pRGB; 
		} 
		memcpy(pBmpFile+bmfHdr.bfOffBits,pBits,WIDTH*m_lHeight); 
 
		CFile file; 
		CFileException e; 
		if(!file.Open(lpszPathName,CFile::modeCreate|CFile::modeWrite| 
			CFile::modeNoTruncate|CFile::shareDenyNone,&e)) 
		{ 
			e.ReportError(); 
			return false; 
		} 
		file.Write(pBmpFile,bmfHdr.bfSize); 
 
		delete [] pBmpFile; 
        return true; 
	} 
	 
	return CDocument::OnSaveDocument(lpszPathName); 
} 
 
void CImageMeasureDoc::DeleteContents()  
{ 
	// TODO: Add your specialized code here and/or call the base class 
 
	if((HBITMAP)m_Bitmap!=NULL) 
	{ 
		m_Bitmap.DeleteObject(); 
	} 
	CDocument::DeleteContents(); 
} 
 
 
void CImageMeasureDoc::OnSmooth()  
{ 
	unsigned char* pls=new unsigned char[m_lHeight*WIDTH]; 
	memcpy(pls,pBits,m_lHeight*WIDTH); 
	for (int i=3;i<(m_lHeight-2);i++)	//将3*3矩阵取平均值 
	{		 
		for (int j=3;j<(m_lWidth-2);j++) 
		{ 
			*(pls+i*WIDTH+j)=(*(pBits+i*WIDTH+j)+*(pBits+i*WIDTH+j+1)+*(pBits+i*WIDTH+j-1) 
			   +*(pBits+i*WIDTH+j+WIDTH)+*(pBits+i*WIDTH+j+WIDTH+1)+*(pBits+i*WIDTH+j+WIDTH-1)+ 
			   *(pBits+i*WIDTH+j-WIDTH)+*(pBits+i*WIDTH+j-WIDTH+1)+*(pBits+i*WIDTH+j-WIDTH-1))/9; 
		} 
	} 
	memcpy(pBits,pls,m_lHeight*WIDTH); 
	delete[]pls; 
 
	UpdateAllViews(NULL); 
	// TODO: Add your command handler code here 
 
		 
} 
 
 
void CImageMeasureDoc::OnMidfilter()  
{ 
	unsigned char* pls=new unsigned char[m_lHeight*WIDTH]; 
	memcpy(pls,pBits,m_lHeight*WIDTH); 
	for(int i=3;i255) 
				result = 255; 
			*(pls + i*WIDTH +j) = result; 
 
		} 
	} 
	memcpy(pBits,pls,m_lHeight*WIDTH); 
	delete[]pls; 
	UpdateAllViews(NULL); 
	// TODO: Add your command handler code here 
	 
} 
 
void CImageMeasureDoc::OnMax()  
{	 
	unsigned char* pls=new unsigned char[m_lHeight*WIDTH]; 
	memcpy(pls,pBits,m_lHeight*WIDTH); 
	for(int i=3;iresulty) 
		*(pls+i*WIDTH+j)=resultx; 
	else 
		*(pls+i*WIDTH+j)=resulty; 
 
	if(*(pls+i*WIDTH+j)>255) 
		*(pls+i*WIDTH+j)= 255; 
 
		} 
	} 
	memcpy(pBits,pls,m_lHeight*WIDTH); 
	delete[]pls; 
	UpdateAllViews(NULL); 
 
	// TODO: Add your command handler code here 
	 
} 
 
void CImageMeasureDoc::OnPrewitt()  
{ 
	int dx[9]; 
	dx[0]=1; 
	dx[1]=1; 
	dx[2]=1; 
	dx[3]=0; 
	dx[4]=0; 
	dx[5]=0; 
	dx[6]=0-1; 
	dx[7]=0-1; 
	dx[8]=0-1; 
	int dy[9]; 
	dy[0]=0; 
	dy[1]=1; 
	dy[2]=1; 
	dy[3]=0-1; 
	dy[4]=0; 
	dy[5]=1; 
	dy[6]=0-1; 
	dy[7]=0-1; 
	dy[8]=0; 
	int dxx[9]; 
	int dyy[9]; 
	dxx[0]=0-1; 
	dxx[1]=0; 
	dxx[2]=1; 
	dxx[3]=0-1; 
	dxx[4]=0; 
	dxx[5]=1; 
	dxx[6]=0-1; 
	dxx[7]=0; 
	dxx[8]=0-1; 
	dyy[0]=1; 
	dyy[1]=1; 
	dyy[2]=0; 
	dyy[3]=1; 
	dyy[4]=0; 
	dyy[5]=0-1; 
	dyy[6]=0; 
	dyy[7]=0-1; 
	dyy[8]=0-1; 
	int resultx=0; 
	int resulty=0; 
	int resultxx=0; 
	int resultyy=0; 
	int i=0; 
	int j=0; 
	unsigned char* pls=new unsigned char[m_lHeight*WIDTH]; 
	memcpy(pls,pBits,m_lHeight*WIDTH); 
	for ( i=3;i<(m_lHeight-2);i++) 
	{		 
		for (j=3;j<(m_lWidth-2);j++) 
		{ 
			resultx=abs(*(pBits+i*WIDTH+j)*dx[4]+*(pBits+i*WIDTH+j+1)*dx[5]+*(pBits+i*WIDTH+j-1)*dx[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dx[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dx[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dx[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dx[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dx[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dx[0]); 
		 
			resulty=abs(*(pBits+i*WIDTH+j)*dy[4]+*(pBits+i*WIDTH+j+1)*dy[5]+*(pBits+i*WIDTH+j-1)*dy[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dy[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dy[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dy[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dy[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dy[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dy[0]); 
 
			resultxx=abs(*(pBits+i*WIDTH+j)*dxx[4]+*(pBits+i*WIDTH+j+1)*dxx[5]+*(pBits+i*WIDTH+j-1)*dxx[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dxx[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dxx[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dxx[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dxx[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dxx[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dxx[0]); 
		 
			resultyy=abs(*(pBits+i*WIDTH+j)*dyy[4]+*(pBits+i*WIDTH+j+1)*dyy[5]+*(pBits+i*WIDTH+j-1)*dyy[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dyy[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dyy[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dyy[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dyy[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dyy[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dyy[0]); 
	if (resultx>resulty) 
		*(pls+i*WIDTH+j)=resultx; 
	if (resulty>*(pls+i*WIDTH+j)) 
		*(pls+i*WIDTH+j)=resulty; 
	if (resultxx>*(pls+i*WIDTH+j)) 
		*(pls+i*WIDTH+j)=resultxx; 
	else 
		*(pls+i*WIDTH+j)=resultyy; 
 
	if(*(pls+i*WIDTH+j)>255) 
		*(pls+i*WIDTH+j)= 255; 
 
		} 
	} 
	memcpy(pBits,pls,m_lHeight*WIDTH); 
	delete[]pls; 
	UpdateAllViews(NULL); 
 
	// TODO: Add your command handler code here 
	 
} 
 
void CImageMeasureDoc::OnSobel()  
{	int dx[9]; 
	dx[0]=0-1; 
	dx[1]=0-2; 
	dx[2]=0-1; 
	dx[3]=0; 
	dx[4]=0; 
	dx[5]=0; 
	dx[6]=1; 
	dx[7]=2; 
	dx[8]=1; 
	int dy[9]; 
	dy[0]=0-1; 
	dy[1]=0; 
	dy[2]=1; 
	dy[3]=0-2; 
	dy[4]=0; 
	dy[5]=2; 
	dy[6]=0-1; 
	dy[7]=0; 
	dy[8]=1; 
	int resultx=0; 
	int resulty=0; 
	int i=0; 
	int j=0; 
	unsigned char* pls=new unsigned char[m_lHeight*WIDTH]; 
	memcpy(pls,pBits,m_lHeight*WIDTH); 
	for ( i=3;i<(m_lHeight-2);i++) 
	{		 
		for (j=3;j<(m_lWidth-2);j++) 
		{ 
			resultx=abs(*(pBits+i*WIDTH+j)*dx[4]+*(pBits+i*WIDTH+j+1)*dx[5]+*(pBits+i*WIDTH+j-1)*dx[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dx[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dx[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dx[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dx[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dx[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dx[0]); 
		 
			resulty=abs(*(pBits+i*WIDTH+j)*dy[4]+*(pBits+i*WIDTH+j+1)*dy[5]+*(pBits+i*WIDTH+j-1)*dy[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dy[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dy[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dy[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dy[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dy[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dy[0]); 
	if (resultx>resulty) 
		*(pls+i*WIDTH+j)=resultx; 
	else 
		*(pls+i*WIDTH+j)=resulty; 
 
	if(*(pls+i*WIDTH+j)>255) 
		*(pls+i*WIDTH+j)= 255; 
 
		} 
	} 
	memcpy(pBits,pls,m_lHeight*WIDTH); 
	delete[]pls; 
	UpdateAllViews(NULL); 
 
	// TODO: Add your command handler code here 
	 
} 
 
void CImageMeasureDoc::OnKirsch()  
{ 
	int dx[9]; 
	dx[0]=0; 
	dx[1]=0; 
	dx[2]=0; 
	dx[3]=0; 
	dx[4]=0; 
	dx[5]=0; 
	dx[6]=0-5; 
	dx[7]=0-5; 
	dx[8]=0-5; 
	int dy[9]; 
	dy[0]=0; 
	dy[1]=0; 
	dy[2]=0; 
	dy[3]=0-5; 
	dy[4]=0; 
	dy[5]=0; 
	dy[6]=0-5; 
	dy[7]=0-5; 
	dy[8]=0; 
	int dxx[9]; 
	int dyy[9]; 
	dxx[0]=0-5; 
	dxx[1]=0; 
	dxx[2]=0; 
	dxx[3]=0-5; 
	dxx[4]=0; 
	dxx[5]=0; 
	dxx[6]=0-5; 
	dxx[7]=0; 
	dxx[8]=0; 
	dyy[0]=0-5; 
	dyy[1]=0-5; 
	dyy[2]=0; 
	dyy[3]=0-5; 
	dyy[4]=0; 
	dyy[5]=0; 
	dyy[6]=0; 
	dyy[7]=0; 
	dyy[8]=0; 
	int dxa[9]; 
	dxa[0]=0; 
	dxa[1]=0; 
	dxa[2]=0; 
	dxa[3]=0; 
	dxa[4]=0; 
	dxa[5]=0; 
	dxa[6]=0-5; 
	dxa[7]=0-5; 
	dxa[8]=0-5; 
	int dya[9]; 
	dya[0]=0; 
	dya[1]=0; 
	dya[2]=0; 
	dya[3]=0-5; 
	dya[4]=0; 
	dya[5]=0; 
	dya[6]=0-5; 
	dya[7]=0-5; 
	dya[8]=0; 
	int dxxa[9]; 
	int dyya[9]; 
	dxxa[0]=0-5; 
	dxxa[1]=0; 
	dxxa[2]=0; 
	dxxa[3]=0-5; 
	dxxa[4]=0; 
	dxxa[5]=0; 
	dxxa[6]=0-5; 
	dxxa[7]=0; 
	dxxa[8]=0; 
	dyya[0]=0-5; 
	dyya[1]=0-5; 
	dyya[2]=0; 
	dyya[3]=0-5; 
	dyya[4]=0; 
	dyya[5]=0; 
	dyya[6]=0; 
	dyya[7]=0; 
	dyya[8]=0; 
	int resultx=0; 
	int resulty=0; 
	int resultxx=0; 
	int resultyy=0; 
	int resultxa=0; 
	int resultya=0; 
	int resultxxa=0; 
	int resultyya=0; 
	int i=0; 
	int j=0; 
	unsigned char* pls=new unsigned char[m_lHeight*WIDTH]; 
	memcpy(pls,pBits,m_lHeight*WIDTH); 
	for ( i=3;i<(m_lHeight-2);i++) 
	{		 
		for (j=3;j<(m_lWidth-2);j++) 
		{ 
			resultx=abs(*(pBits+i*WIDTH+j)*dx[4]+*(pBits+i*WIDTH+j+1)*dx[5]+*(pBits+i*WIDTH+j-1)*dx[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dx[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dx[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dx[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dx[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dx[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dx[0]); 
		 
			resulty=abs(*(pBits+i*WIDTH+j)*dy[4]+*(pBits+i*WIDTH+j+1)*dy[5]+*(pBits+i*WIDTH+j-1)*dy[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dy[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dy[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dy[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dy[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dy[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dy[0]); 
			//2 
			resultxx=abs(*(pBits+i*WIDTH+j)*dxx[4]+*(pBits+i*WIDTH+j+1)*dxx[5]+*(pBits+i*WIDTH+j-1)*dxx[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dxx[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dxx[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dxx[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dxx[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dxx[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dxx[0]); 
		 
			resulty=abs(*(pBits+i*WIDTH+j)*dyy[4]+*(pBits+i*WIDTH+j+1)*dyy[5]+*(pBits+i*WIDTH+j-1)*dyy[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dyy[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dyy[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dyy[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dyy[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dyy[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dyy[0]); 
			//4 
			resultxa=abs(*(pBits+i*WIDTH+j)*dxa[4]+*(pBits+i*WIDTH+j+1)*dxa[5]+*(pBits+i*WIDTH+j-1)*dxa[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dxa[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dxa[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dxa[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dxa[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dxa[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dxa[0]); 
		 
			resultya=abs(*(pBits+i*WIDTH+j)*dya[4]+*(pBits+i*WIDTH+j+1)*dya[5]+*(pBits+i*WIDTH+j-1)*dya[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dya[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dya[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dya[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dya[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dya[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dya[0]); 
			//6 
			resultxxa=abs(*(pBits+i*WIDTH+j)*dxxa[4]+*(pBits+i*WIDTH+j+1)*dxxa[5]+*(pBits+i*WIDTH+j-1)*dxxa[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dxxa[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dxxa[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dxxa[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dxxa[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dxxa[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dxxa[0]); 
		 
			resultyya=abs(*(pBits+i*WIDTH+j)*dyya[4]+*(pBits+i*WIDTH+j+1)*dyya[5]+*(pBits+i*WIDTH+j-1)*dyya[3] 
			   +*(pBits+i*WIDTH+j+WIDTH)*dyya[7]+*(pBits+i*WIDTH+j+WIDTH+1)*dyya[8]+*(pBits+i*WIDTH+j+WIDTH-1)*dyya[6]+ 
			   *(pBits+i*WIDTH+j-WIDTH)*dyya[1]+*(pBits+i*WIDTH+j-WIDTH+1)*dyya[2]+*(pBits+i*WIDTH+j-WIDTH-1)*dyya[0]); 
	if (resultx>resulty) 
		*(pls+i*WIDTH+j)=resultx; 
	if (resulty>*(pls+i*WIDTH+j)) 
		*(pls+i*WIDTH+j)=resulty; 
	if (resultxx>*(pls+i*WIDTH+j)) 
		*(pls+i*WIDTH+j)=resultxx; 
	if (resultyy>*(pls+i*WIDTH+j)) 
		*(pls+i*WIDTH+j)=resultyy; 
 
	if (resultxa>*(pls+i*WIDTH+j)) 
		*(pls+i*WIDTH+j)=resultxa; 
	if (resultya>*(pls+i*WIDTH+j)) 
		*(pls+i*WIDTH+j)=resultya; 
	if (resultxxa>*(pls+i*WIDTH+j)) 
		*(pls+i*WIDTH+j)=resultxxa; 
	else 
		*(pls+i*WIDTH+j)=resultyya; 
 
	if(*(pls+i*WIDTH+j)>255) 
		*(pls+i*WIDTH+j)= 255; 
 
		} 
	} 
	memcpy(pBits,pls,m_lHeight*WIDTH); 
	delete[]pls; 
	UpdateAllViews(NULL); 
 
	// TODO: Add your command handler code here 
	 
} 
 
void CImageMeasureDoc::OnTwo()  
{ 
	long int a[256]; 
	for (int l=0;l<256;l++) 
		a[l]=0; 
	int hui; 
	long int sum=0; 
	long int sum1=0; 
	long int sum2=0; 
	long int s=m_lHeight*m_lWidth;//总像素数 
	long int s1=0;	 
	long int s2=0; 
	int ave; 
	int ave1; 
	int ave2; 
	int i; 
	int j; 
	for (i=0;iave) 
					*(pBits+i*WIDTH+j)=255; 
				else *(pBits+i*WIDTH+j)=0; 
			} 
		} 
	UpdateAllViews(NULL); 
	// TODO: Add your command handler code here 
	 
} 
 
void CImageMeasureDoc::OnXihua()  
{	 
	int k; 
	int i; 
	int j; 
	for (i=0;il[d]&&l[d]!=0){ 
						min=l[d]; 
					} 
				} 
				for(d=0;d<4;d++){ 
					if(maxl[d]&&l[d]!=0){ 
						min=l[d]; 
					} 
				} 
				for(d=0;d<4;d++){ 
					if(max