www.pudn.com > bmpstudy.rar > exam7View.cpp


// exam7View.cpp : implementation of the CExam7View class 
// 
 
#include "stdafx.h" 
#include "exam7.h" 
 
#include "exam7Doc.h" 
#include "exam7View.h" 
 
#include "ZFT.h" 
#include "move.h" 
#include "mirror.h" 
#include "DlgGray.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CExam7View 
 
IMPLEMENT_DYNCREATE(CExam7View, CView) 
 
BEGIN_MESSAGE_MAP(CExam7View, CView) 
	//{{AFX_MSG_MAP(CExam7View) 
	ON_COMMAND(ID_LOAD, OnLoad) 
	ON_COMMAND(ID_TRAN, OnTran) 
	ON_COMMAND(ID_ZFT, OnZft) 
	ON_COMMAND(ID_ERZHI, OnErzhi) 
	ON_COMMAND(ID_GRAY, OnGray) 
	ON_UPDATE_COMMAND_UI(ID_ZFT, OnUpdateZft) 
	ON_UPDATE_COMMAND_UI(ID_GRAY, OnUpdateGray) 
	ON_UPDATE_COMMAND_UI(ID_ERZHI, OnUpdateErzhi) 
	ON_COMMAND(ID_MOVE, OnMove) 
	ON_COMMAND(ID_MIRROR, OnMirror) 
	ON_COMMAND(ID_ROTATE, OnRotate) 
	ON_COMMAND(ID_BIGGER, OnBigger) 
	ON_COMMAND(ID_SMALLER, OnSmaller) 
	ON_COMMAND(ID_GRAYLINETRANS, OnGraylinetrans) 
	ON_COMMAND(ID_ZFTPOISE, OnZftpoise) 
	ON_COMMAND(ID_AVERAGEFILTER, OnAveragefilter) 
	ON_COMMAND(ID_MIDFILTER, OnMidfilter) 
	ON_UPDATE_COMMAND_UI(ID_TRAN, OnUpdateTran) 
	ON_UPDATE_COMMAND_UI(ID_MOVE, OnUpdateMove) 
	ON_UPDATE_COMMAND_UI(ID_MIRROR, OnUpdateMirror) 
	ON_UPDATE_COMMAND_UI(ID_ROTATE, OnUpdateRotate) 
	ON_UPDATE_COMMAND_UI(ID_BIGGER, OnUpdateBigger) 
	ON_UPDATE_COMMAND_UI(ID_SMALLER, OnUpdateSmaller) 
	ON_UPDATE_COMMAND_UI(ID_GRAYLINETRANS, OnUpdateGraylinetrans) 
	ON_UPDATE_COMMAND_UI(ID_ZFTPOISE, OnUpdateZftpoise) 
	ON_UPDATE_COMMAND_UI(ID_AVERAGEFILTER, OnUpdateAveragefilter) 
	ON_UPDATE_COMMAND_UI(ID_MIDFILTER, OnUpdateMidfilter) 
	ON_COMMAND(ID_CONTRARYCOLOR, OnContrarycolor) 
	ON_UPDATE_COMMAND_UI(ID_CONTRARYCOLOR, OnUpdateContrarycolor) 
	ON_COMMAND(ID_HIGHFLITER, OnHighfliter) 
	ON_COMMAND(ID_RELIEVO, OnRelievo) 
	ON_COMMAND(ID_CANVAS, OnCanvas) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CExam7View construction/destruction 
 
CExam7View::CExam7View() 
{ 
	// TODO: add construction code here 
	m_palette = NULL; 
	m_bGray = false ; 
	m_x = 0; 
	m_y = 0; 
	 
} 
 
CExam7View::~CExam7View() 
{ 
	delete m_palette; 
} 
 
BOOL CExam7View::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CExam7View drawing 
 
void CExam7View::OnDraw(CDC* pDC) 
{ 
	 
	CExam7Doc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	// TODO: add draw code for native data here	 
	//设置背景 
	CBrush brush(RGB (180,180,180) ); 
	CBrush* pOldBrush = pDC->SelectObject (&brush); 
	CRect rcClip ; 
	pDC->GetClipBox (&rcClip); 
	pDC->PatBlt (rcClip.left , rcClip.top ,rcClip.Width() , rcClip.Height() ,PATCOPY ); 
	pDC->SelectObject (pOldBrush ); 
	 
	// 
 
 
	CRect rect; 
	GetClientRect(&rect); 
 
	 
	if(m_dib.GetRGB()&&m_dib.IsValid()) 
	{ 
 
		CPalette* pOldPalette = pDC->SelectPalette(m_palette,true); 
		pDC->RealizePalette(); 
		//显示图像 
		::StretchDIBits(pDC->GetSafeHdc(), 
			rect.Width()/2-ScaledWidth/2+m_x,	//目标设备逻辑横坐标(居中显示) 
			rect.Height()/2-ScaledHeight/2+m_y,	//目标设备逻辑纵坐标(居中显示) 
			ScaledWidth,//显示位图的像素宽 
			ScaledHeight,//显示位图的像素高度 
			0, 
			0, 
			m_dib.GetWidth(), 
			m_dib.GetHeight(), 
			m_dib.GetData(), 
			m_dib.GetInfo(), 
			DIB_RGB_COLORS,SRCCOPY); 
 
		pDC->SelectPalette(pOldPalette,true); 
		::DeleteObject(m_palette); 
	} 
	 
 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CExam7View diagnostics 
 
#ifdef _DEBUG 
void CExam7View::AssertValid() const 
{ 
	CView::AssertValid(); 
} 
 
void CExam7View::Dump(CDumpContext& dc) const 
{ 
	CView::Dump(dc); 
} 
 
CExam7Doc* CExam7View::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CExam7Doc))); 
	return (CExam7Doc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CExam7View message handlers 
 
//创建位图调色板 
CPalette* CExam7View::CreateBitmapPalette(CDib *pBitmap) 
{ 
	if(m_dib.GetNumberOfColors()!=256) 
		MessageBox("对不起! 不是256色图! 目前此程序还不支持这种位图! ","警告!",MB_ICONWARNING); 
	struct 
	{ 
		WORD Version; 
		WORD NumberOfEntries; 
		PALETTEENTRY aEntries[256]; 
	}palette={0x300,256}; 
 
/*	LPLOGPALETTE pLogPal =  
		(LPLOGPALETTE) new char[2 * sizeof(WORD) + 
		m_nColorEntries * sizeof(PALETTEENTRY)]; 
	if(m_palette != NULL) //::DeleteObject(m_palette); 
		m_palette = NULL; 
	LPLOGPALETTE pLogPal =  
		(LPLOGPALETTE) new char[2*sizeof(WORD)+256*sizeof(PALETTEENTRY)]; 
	pLogPal->palVersion = 0x300; 
	pLogPal->palNumEntries = 256;*/ 
 
	LPRGBQUAD pRGBTable = pBitmap->GetRGB(); 
	UINT numberOfColors = pBitmap->GetNumberOfColors(); 
 
	for(UINT x=0;xCreatePalette((LPLOGPALETTE)&palette); 
 
	//delete pLogPal; 
	return m_palette; 
 
} 
 
void CExam7View::OnLoad()  
{ 
	// TODO: Add your command handler code here 
 
	CFileDialog dlgFile(TRUE, NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
						"Picture Files (*.bmp;)|*.bmp|", this); 
 
	CString str; 
	//打开文件对话框 
	if(dlgFile.DoModal()==IDOK) 
	{ 
 
		//dlgFile.GetFileName(); 
		str = dlgFile.GetPathName(); 
 
	} 
	else return; 
 
	//载入文件 
	m_dib.LoadFile(str); 
 
	this->m_bGray = false; 
	if(m_palette!=NULL) delete m_palette; 
 
	m_palette = new CPalette; 
	m_scale = 1;		//控制缩放比例 
 
//	BYTE * pBitmapData = m_dib.GetData(); 
//	LPBITMAPINFO pBitmapInfo = m_dib.GetInfo(); 
//	int bitmapwidth = m_dib.GetWidth(); 
//	int bitmapheight = m_dib.GetHeight(); 
 
	ScaledWidth = (int)(m_dib.GetWidth()*m_scale); 
	ScaledHeight = (int)(m_dib.GetHeight()*m_scale); 
	m_palette = CreateBitmapPalette(&m_dib); 
	Invalidate(); 
	 
} 
 
//转置 
void CExam7View::OnTran()  
{ 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
	// TODO: Add your command handler code here 
	//获得图像的宽度和高度 
	LONG wide = m_dib.GetWidth(); 
	LONG height = m_dib.GetHeight(); 
	//原图一行字节数 
	LONG lLineBytes = (((wide*8)+31)/32*4); 
	//新图一行字节数 
	LONG lNewLineBytes = (((height*8)+31)/32*4); 
	//获得位图数据区指针 
	LPBYTE p_data = m_dib.GetData(); 
 
	LPBYTE lpSrc,lpDst; 
	LPBYTE pTemp; 
	int i,j; 
	//为临时空间,分配空间 
	pTemp = new BYTE[wide*lNewLineBytes]; 
	 
	//a[i][j] = b[j][i] 
	for(j=0;jbiHeight = wide; 
	m_dib.m_pBitmapInfoHeader->biWidth = height; 
	 
	//拷贝内存 
	memcpy(p_data,pTemp,wide*height); 
	//计算输出图像宽度和高度 
	ScaledWidth = (int)(m_dib.GetWidth()*m_scale); 
	ScaledHeight = (int)(m_dib.GetHeight()*m_scale); 
 
	Invalidate(); 
 
	delete pTemp; 
} 
 
void CExam7View::OnZft()  
{ 
	// TODO: Add your command handler code here 
	if(!m_dib.IsValid()) 
	{ 
		AfxMessageBox("没有图像!"); 
		return; 
	} 
 
	 
	CZFT dlg; 
 
	float a[256]; 
	int i; 
 
	LONG lMaxCount; 
	this->GetProbability(a); 
 
	//记录最大值 
	for(i=0;i<256;i++) 
	{ 
 
		if(a[i]>lMaxCount) 
			lMaxCount = (LONG)a[i]; 
 
	} 
	 
 
	for(i=0;i<256;i++) 
	{ 
		a[i] = a[i]*256/lMaxCount; 
		 
	} 
 
	 
	memcpy(dlg.num,a,256*sizeof(float)); 
	dlg.m_MaxCount = lMaxCount; 
	dlg.DoModal(); 
 
	 
} 
 
void CExam7View::OnErzhi()  
{ 
	// TODO: Add your command handler code here 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
	BYTE GrayValue; 
	RGBQUAD *pRGB; 
	pRGB = m_dib.GetRGB(); 
	for(unsigned int i=0;i< m_dib.GetNumberOfColors();i++) 
	{ 
		//加权平均 
		GrayValue = (BYTE)(pRGB[i].rgbRed*0.3+pRGB[i].rgbGreen*0.59+pRGB[i].rgbBlue*0.11); 
		if(GrayValue>100) 
			pRGB[i].rgbRed = pRGB[i].rgbGreen = pRGB[i].rgbBlue = 255; 
		else 
			pRGB[i].rgbRed = pRGB[i].rgbGreen = pRGB[i].rgbBlue = 0; 
	} 
	Invalidate();	 
} 
 
void CExam7View::OnUpdateErzhi(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	 
	if(m_dib.IsValid()&&m_bGray) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
} 
 
//灰度化 
void CExam7View::OnGray()  
{ 
	// TODO: Add your command handler code here 
	if(!m_dib.IsValid()) 
	{ 
		AfxMessageBox("没有图像!"); 
		return; 
	} 
 
	CExam7Doc *pDoc = GetDocument(); 
 
//	LPBYTE p_data; 
	LPBYTE lpSrc; 
 
	//灰度映射表 
	BYTE bGrayMap[256]; 
	//循环变量 
	int i; 
	LONG ih; 
	LONG iw; 
 
	//图像宽度和高度 
	LONG lWidth; 
	LONG lHeight; 
 
	LONG OneLineBytes; 
	 
	LPBITMAPINFO lpbmi;//(win3.0) 
	LPBITMAPCOREINFO lpbmc;//(OS/2) 
 
 
	 
	lpbmi = (LPBITMAPINFO)m_dib.pDib; 
	lpbmc = (LPBITMAPCOREINFO)m_dib.pDib; 
 
 
	if(m_dib.GetNumberOfColors()!=256) 
	{ 
		MessageBox("不是256色图!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
	BeginWaitCursor(); 
 
	for(i=0;i<256;i++) 
	{ 
		if(((*(LPDWORD)(m_dib.pDib)) == sizeof(BITMAPINFOHEADER))) 
		{ 
			bGrayMap[i] = (BYTE)(lpbmi->bmiColors[i].rgbRed*0.3+ 
								lpbmi->bmiColors[i].rgbGreen*0.59+ 
								lpbmi->bmiColors[i].rgbBlue*0.11); 
 
			lpbmi->bmiColors[i].rgbRed = i; 
			lpbmi->bmiColors[i].rgbGreen = i; 
			lpbmi->bmiColors[i].rgbBlue = i; 
			lpbmi->bmiColors[i].rgbReserved = 0; 
 
		} 
		else 
		{ 
			bGrayMap[i] = (BYTE)(lpbmc->bmciColors[i].rgbtRed*0.3+ 
								lpbmc->bmciColors[i].rgbtGreen*0.59+ 
								lpbmc->bmciColors[i].rgbtBlue*0.11); 
 
 
			lpbmc->bmciColors[i].rgbtRed = i; 
			lpbmc->bmciColors[i].rgbtGreen = i; 
			lpbmc->bmciColors[i].rgbtBlue = i; 
 
		} 
	} 
 
	lWidth = m_dib.GetWidth(); 
	lHeight = m_dib.GetHeight(); 
 
	OneLineBytes = (((lWidth*8)+31)/32*4); 
 
	//更换每个像素的索引号 
	for(ih=0;ihSetPaletteEntries(0,256,(LPPALETTEENTRY)lpbmi->bmiColors); 
 
		//OnDoRealize( 
	//	pDoc->GetDocPalette()->SetPaletteEntries(0,256,(LPPALETTEENTRY)lpbmi->bmiColors); 
//	BYTE GrayValue; 
/*	RGBQUAD *pRGB; 
	pRGB = m_dib.GetRGB(); 
	for(unsigned int i=0;i< m_dib.GetNumberOfColors();i++) 
	{ 
		//加权平均 
		GrayValue = (BYTE)(pRGB[i].rgbRed*0.3+pRGB[i].rgbGreen*0.59+pRGB[i].rgbBlue*0.11); 
		pRGB[i].rgbRed = pRGB[i].rgbGreen = pRGB[i].rgbBlue = GrayValue; 
	}*/ 
	 
 
		EndWaitCursor(); 
		m_bGray = true; 
		Invalidate(); 
	 
} 
 
////////// 
void CExam7View::OnUpdateGray(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	if(m_dib.IsValid()) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
 
void CExam7View::OnUpdateZft(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	if(m_bGray) 
	{ 
		pCmdUI->Enable(true); 
		pCmdUI->SetText("直方图"); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
		pCmdUI->SetText("直方图(不是灰度图!)"); 
	} 
	 
} 
 
 
 
 
//平移 
void CExam7View::OnMove()  
{ 
	// TODO: Add your command handler code here 
	if(!m_dib.IsValid()) 
	{ 
 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
	CMove dlg; 
 
	if(dlg.DoModal()==IDOK) 
	{ 
 
		m_x = m_x+dlg.m_x; 
		m_y = m_y+dlg.m_y; 
 
	} 
 
	Invalidate(); 
	 
} 
 
//镜像 
void CExam7View::OnMirror()  
{ 
	// TODO: Add your command handler code here 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
	CMirror dlg; 
	LONG wide = m_dib.GetWidth(); 
	LONG height = m_dib.GetHeight(); 
	LONG OneRowBytes = (((wide*8)+31)/32*4); 
	LONG OneLineBytes = (((height*8)+31)/32*4); 
 
 
	int i,j; 
	 
	LPBYTE p_data = m_dib.GetData(); 
	LPBYTE pTemp = new BYTE[OneRowBytes*OneLineBytes]; 
	LPBYTE lpSrc,lpDst; 
	if(dlg.DoModal()==IDOK) 
	{ 
 
		if(dlg.m_bH) 
		{ 
			for(i=0;ibiBitCount==8) 
	{ 
		 
		for(int i=0;ibiWidth = newwide; 
			m_dib.m_pBitmapInfoHeader->biHeight = newheight; 
			ScaledHeight = (int)(newheight*m_scale); 
			ScaledWidth = (int)(newwide*m_scale); 
			memcpy(p_data,pTemp,newwide*newheight); 
			//m_dib.m_pData=pTemp; 
	} 
	else 
	{ 
		MessageBox("不能处理!可能不是8位图!","警告!",MB_ICONWARNING); 
	} 
	delete pTemp; 
	Invalidate(); 
} 
 
void CExam7View::OnBigger()  
{ 
	// TODO: Add your command handler code here 
 
 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
 
	m_scale = m_scale+0.1; 
	ScaledWidth = (int)(m_scale*m_dib.GetWidth()); 
	ScaledHeight = (int)(m_scale*m_dib.GetHeight()); 
 
 
	Invalidate(); 
 
} 
 
void CExam7View::OnSmaller()  
{ 
	// TODO: Add your command handler code here 
 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
 
	if(m_scale>0) 
	{ 
		m_scale = m_scale-0.1; 
		ScaledWidth = (int)(m_scale*m_dib.GetWidth()); 
		ScaledHeight = (int)(m_scale*m_dib.GetHeight()); 
	} 
 
 
	Invalidate();	 
 
} 
 
 
//灰度的线性拉伸 
void CExam7View::OnGraylinetrans()  
{ 
	// TODO: Add your command handler code here 
 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
	int nX1,nY1,nX2,nY2; 
 
	CDlgGray dlg; 
 
	if(dlg.DoModal()==IDOK) 
	{ 
		nX1 = dlg.m_nX1; 
		nY1 = dlg.m_nY1; 
		nX2 = dlg.m_nX2; 
		nY2 = dlg.m_nY2; 
	} 
	else 
		return; 
 
	LONG width = m_dib.GetWidth(); 
	LONG height = m_dib.GetHeight(); 
	 
 
	LPBYTE lpSrc; 
	 
	int i,j; 
	// 
	BYTE bGrayMap[256]; 
 
	LONG OneLineBytes = ((width*8)+31)/32*4; 
 
	for(i=0;i0) 
		{ 
			bGrayMap[i] = (BYTE)(nY1*i/nX1); 
 
		} 
		else 
		{ 
 
			bGrayMap[i] = 0; 
 
		} 
 
	} 
	for(;ilMaxCount) 
			lMaxCount = (LONG)a[i]; 
 
	} 
	 
 
	for(i=0;i<256;i++) 
	{ 
		a[i] = a[i]*256/lMaxCount; 
		 
	}*/ 
 
} 
 
 
//直方图均衡化 
void CExam7View::OnZftpoise()  
{ 
	// TODO: Add your command handler code here 
 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
	LONG i,j; 
 
	LONG width = m_dib.GetWidth(); 
	LONG height = m_dib.GetHeight(); 
	//灰度分布 
	float fps_R[256]; 
 
	//中间变量 
	float temp_R[256]; 
 
	int nNs_R[256]; 
 
	memset(temp_R,0,sizeof(temp_R));///////////??? 
 
	LPBYTE p_data = m_dib.GetData(); 
 
	this->GetProbability(fps_R); 
 
	for(i =0;i<256;i++) 
	{ 
		fps_R[i] = fps_R[i]/(width*height);	 
	} 
	 
	for(i=0;i<256;i++) 
	{ 
		if(i==0) 
		{ 
			temp_R[0] = fps_R[0]; 
		} 
		else 
		{ 
			temp_R[i] = temp_R[i-1] + fps_R[i]; 
		} 
		nNs_R[i] = (int)(255.0f * temp_R[i] + 0.5f); 
 
	} 
 
	//si =  n1/n + n2/n + … +ni/n; 
	for(i=0;ivalue[y]) 
					{ 
						temp = value[x]; 
						value[x] = value[y]; 
						value[y] = temp; 
					} 
				} 
			} 
 
			 
			pTemp[width * i + j] = value[4]; 
			 
		} 
	} 
	 
	memcpy(p_data, pTemp, size); 
	 
	Invalidate(); 
	delete pTemp; 
 
	 
} 
 
void CExam7View::OnUpdateTran(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	if(m_dib.IsValid()) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateMove(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	if(m_dib.IsValid()) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateMirror(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	if(m_dib.IsValid()) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateRotate(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	if(m_dib.IsValid()) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateBigger(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
 
	if(m_dib.IsValid()) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateSmaller(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
 
	if(m_dib.IsValid()) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateGraylinetrans(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	if(m_dib.IsValid()&&m_bGray) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateZftpoise(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
 
		 
	if(m_dib.IsValid()&&m_bGray) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateAveragefilter(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
 
	if(m_dib.IsValid()&&m_bGray) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnUpdateMidfilter(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
 
	if(m_dib.IsValid()&&m_bGray) 
	{ 
		pCmdUI->Enable(); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnContrarycolor()  
{ 
	// TODO: Add your command handler code here 
 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
	LONG i,j; 
	LONG width = m_dib.GetWidth(); 
	LONG height = m_dib.GetHeight(); 
 
	LPBYTE p_data = m_dib.GetData(); 
 
	for(i=0;iEnable(true); 
	} 
	else 
	{ 
		pCmdUI->Enable(false); 
	} 
	 
} 
 
void CExam7View::OnHighfliter()  
{ 
	// TODO: Add your command handler code here 
 
	if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
	LONG width = m_dib.GetWidth(); 
	LONG height = m_dib.GetHeight(); 
	LONG i, j; 
	LONG OneLineBytes = ((width*8)+31)/32*4; 
	LPBYTE p_data = m_dib.GetData(); 
 
	LPBYTE pTemp = new BYTE[OneLineBytes * height]; 
 
	for(i=1;i255) 
				*((LPBYTE)pTemp + i * OneLineBytes + j) = 255; 
			else 
				*((LPBYTE)pTemp + i * OneLineBytes + j) = temp; 
		} 
		 
	} 
 
	memcpy(p_data,pTemp,OneLineBytes*height); 
 
	Invalidate(); 
	delete pTemp;	 
} 
 
void CExam7View::OnCanvas()  
{ 
	// TODO: Add your command handler code here 
 
		if(!m_dib.IsValid()) 
	{ 
		MessageBox("没有图像!","警告!",MB_ICONWARNING); 
		return; 
	} 
 
	LONG width = m_dib.GetWidth(); 
	LONG height = m_dib.GetHeight(); 
	LONG i, j; 
	LONG OneLineBytes = ((width*8)+31)/32*4; 
	LPBYTE p_data = m_dib.GetData(); 
 
	LPBYTE pTemp = new BYTE[OneLineBytes * height]; 
	int di, dj; 
	for(i=1;i