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

📄 bmpdemoview.cpp

📁 主要是应用VC进行傅立叶变换和反变换的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();						
		EndWaitCursor();
	}	
}

void CBmpDemoView::OnUpdateEditUndo(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);	
		pCmdUI->Enable(pDoc->UndoFlag);
}

void CBmpDemoView::OnEditUndo() 
{
	// TODO: Add your command handler code here
	CBmpDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pDoc->m_mOldBmp.SetScale(pDoc->m_mBmp.GetScale());
	pDoc->m_mBmp=pDoc->m_mOldBmp;
	pDoc->m_mBmp.DataToView(pDoc->m_mViewBmp);
	pDoc->UndoFlag=FALSE;
	CRect r;
	GetClientRect(&r);
	SetScroll();
	InvalidateRect(&r,TRUE);
	UpdateWindow();							
}

void CBmpDemoView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
    CStatusBar* pStatus=(CStatusBar*)
	      AfxGetApp()->m_pMainWnd->GetDescendantWindow(AFX_IDW_STATUS_BAR);
	if(pStatus)
	{

		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		CFrameWnd *pframe=GetParentFrame();
		CFrameWnd *mframe=pframe->GetParentFrame();
		CFrameWnd *frame=mframe->GetActiveFrame();
		CPoint ori=GetScrollPosition();
		int width=pDoc->m_mBmp.GetDispWidth();
		int height=pDoc->m_mBmp.GetDispHeight();
		if(frame==pframe)
		{
			CString str;
			if( (point.x>OriX)&&(point.x<OriX+width)&&\
				(point.y>OriY)&&(point.y<OriY+height))
			{
				CClientDC dc(this);
				COLORREF color=dc.GetPixel(point);
				str.Format("x:%i  y:%i",point.x+ori.x-OriX,point.y+ori.y-OriY);
				pStatus->SetPaneText(2,str);
				str.Empty();
				str.Format("R:%i  G:%i  B:%i",GetRValue(color),\
							GetGValue(color),GetBValue(color));
				pStatus->SetPaneText(1,str);
			}
			else
			{
				pStatus->SetPaneText(1,"");
				pStatus->SetPaneText(2,"在图象范围之外");
			}
		}
	}
	CScrollView::OnMouseMove(nFlags, point);
}


void CBmpDemoView::OnThpfilter() 
{
	// TODO: Add your command handler code here
	FilterDialog dlg1;
	dlg1.SetFlag(0);
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->OnThpfilter(dlg1.m_min,dlg1.m_max);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();						
		EndWaitCursor();
	}		
}

void CBmpDemoView::OnTlpfilter() 
{
	// TODO: Add your command handler code here
	FilterDialog dlg1;
	dlg1.SetFlag(0);
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->OnTlpfilter(dlg1.m_min,dlg1.m_max);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();						
		EndWaitCursor();
	}			
}

void CBmpDemoView::OnExphpfilter() 
{
	// TODO: Add your command handler code here
	FilterDialog dlg1;
	dlg1.SetFlag(2);
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->OnExphpfilter(dlg1.m_min);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();					
		EndWaitCursor();
	}				
}

void CBmpDemoView::OnExplpfilter() 
{
	// TODO: Add your command handler code here
	FilterDialog dlg1;
	dlg1.SetFlag(1);
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->OnExplpfilter(dlg1.m_max);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();						
		EndWaitCursor();
	}					
}

void CBmpDemoView::OnEnlarge() 
{
	// TODO: Add your command handler code here
	DuiBiDu dlg1;
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->OnEnlarge(dlg1.m_mSrc1,dlg1.m_mDes1,dlg1.m_mSrc2,dlg1.m_mDes2);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();						
		EndWaitCursor();
	}
}

void CBmpDemoView::OnUpdateNfft(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CBmpDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pCmdUI->Enable(pDoc->flag);	
}

void CBmpDemoView::OnUpdateNdft(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CBmpDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pCmdUI->Enable(pDoc->flag);		
}


void CBmpDemoView::OnDestroy() 
{
	CScrollView::OnDestroy();
	// TODO: Add your message handler code here
}

void CBmpDemoView::OnImageproperty() 
{
	// TODO: Add your command handler code here
	class ImagePropertyDialog dlg1;
	CBmpDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	dlg1.m_ImageWidth=pDoc->m_mBmp.GetWidth();
	dlg1.m_ImageHeight=pDoc->m_mBmp.GetHeight();
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		pDoc->OnImageproperty(dlg1.m_ImageWidth,dlg1.m_ImageHeight);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();	
		EndWaitCursor();
	}
}


void CBmpDemoView::OnNegative() 
{
	// TODO: Add your command handler code here
	CBmpDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pDoc->OnNegative();
	CRect r;
	GetClientRect(&r);
	SetScroll();
	InvalidateRect(&r,TRUE);
	UpdateWindow();						
}

void CBmpDemoView::OnSinNoise() 
{
	// TODO: Add your command handler code here
	class NoiseDialog dlg1;
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->OnSinNoise(dlg1.m_ReValue,dlg1.m_ImValue,\
						 dlg1.m_Distance,dlg1.m_Jd,dlg1.flag);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();	
		EndWaitCursor();
	}
}


void CBmpDemoView::OnSlowChange() 
{
	// TODO: Add your command handler code here
	CBmpDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	int width=pDoc->m_mBmp.GetWidth();
	int height=pDoc->m_mBmp.GetHeight();
	memBITMAP bmp;
	bmp.CreateDirect(width,height);
	CClientDC dc(this);
	int i,j,k;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
		{
			COLORREF color=pDoc->m_mBmp.GetPixel(i,j);
			bmp.SetPixel(i,j,color);
		}
	}

	for(k=0;k<25;k++)
	{
		int dColor=10*k;
		for(i=0;i<width;i++)
		{
			for(j=0;j<height;j++)
			{
				COLORREF color=bmp.GetPixel(i,j);
				int r,g,b;
				r=GetRValue(color)-10;
				if(r<0)r=0;
				g=GetGValue(color)-10;
				if(g<0)g=0;
				b=GetBValue(color)-10;
				if(b<0)b=0;
				bmp.SetPixel(i,j,RGB((BYTE)r,(BYTE)g,(BYTE)b));
			}
		}
		CRect r;
		GetClientRect(&r);
		CPoint p=GetScrollPosition();
		r.right+=p.x;
		r.bottom+=p.y;
//		CBrush brush(RGB(0,0,0));
//		dc.FillRect(&r,&brush);
		int width=r.right-r.left;
		int height=r.bottom-r.top;
		OriX=width-bmp.GetDispWidth();
		OriY=height-bmp.GetDispHeight();
		OriX/=2;
		OriY/=2;
		OriX=OriX>0?OriX:0;
		OriY=OriY>0?OriY:0;
		bmp.Display(OriX,OriY,&dc); 
//		Sleep(50);
	}	
	bmp.Release();
	CRect r;
	GetClientRect(&r);
	CPoint p=GetScrollPosition();
	r.right+=p.x;
	r.bottom+=p.y;
	CBrush brush(RGB(0,0,0));
	dc.FillRect(&r,&brush);
	width=r.right-r.left;
	height=r.bottom-r.top;
	OriX=width-pDoc->m_mBmp.GetDispWidth();
	OriY=height-pDoc->m_mBmp.GetDispHeight();
	OriX/=2;
	OriY/=2;
	OriX=OriX>0?OriX:0;
	OriY=OriY>0?OriY:0;
	pDoc->m_mBmp.Display(OriX,OriY,&dc); 
}

void CBmpDemoView::OnZhongZhiFilter() 
{
	// TODO: Add your command handler code here
	ZhongZhiFilterDialog dlg1;
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->OnZhongZhiFilter(dlg1.flag);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();	
		EndWaitCursor();
	}
}

void CBmpDemoView::OnGreyDuiShuBianHuan() 
{
	// TODO: Add your command handler code here
	GreyDuiShuDialog dlg1;
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		pDoc->OnGreyDuiShuBianHuan(dlg1.m_Var1);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();	
		EndWaitCursor();
	}
}

void CBmpDemoView::OnRotate() 
{
	// TODO: Add your command handler code here
	RotateDialog dlg1;
	if(dlg1.DoModal()==IDOK)
	{
		BeginWaitCursor();
		CBmpDemoDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		float scale=pDoc->m_mBmp.GetScale();
		pDoc->OnRotate(dlg1.m_xzjd);
		pDoc->m_mBmp.SetScale(scale);
		CRect r;
		GetClientRect(&r);
		SetScroll();
		InvalidateRect(&r,TRUE);
		UpdateWindow();	
		EndWaitCursor();
	}	
}

void CBmpDemoView::OnRandomShow() 
{
	// TODO: Add your command handler code here
	//图象渐渐显示,渐渐消失
	BeginWaitCursor();

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

	int width=pDoc->m_mViewBmp.GetWidth();
	int height=pDoc->m_mViewBmp.GetHeight();
 
	int BlockSize=10;
	int cx,cy;
	BOOL XFlag=FALSE;	//水平方向是否能被10整除
	BOOL YFlag=FALSE;	//垂直方向是否能被10整除
	if(width%BlockSize==0)cx=width/BlockSize;
	else 
	{
		cx=width/BlockSize+1;
		XFlag=TRUE;
	}
	if(height%BlockSize==0)cy=height/BlockSize;
	else
	{
		cy=height/BlockSize+1;
		YFlag=TRUE;
	}
	int BlockNum=cx*cy;

	BOOL *BlockFlag=new BOOL[BlockNum+100];
	int i,j;
	for(i=0;i<BlockNum;i++)
		*(BlockFlag+i)=TRUE;

	BOOL Flag=TRUE;
	BOOL Flag1=FALSE;
	memBITMAP bmp1,bmp2,bmp3,bmp4;;
	bmp1.CreateDirect(BlockSize,BlockSize);
	bmp2.CreateDirect(width%BlockSize,BlockSize);		//行尾小块
	bmp3.CreateDirect(BlockSize,height%BlockSize);	//列尾小块
	bmp4.CreateDirect(width%BlockSize,height%BlockSize);	//最尾小块

	CClientDC dc(this);
	CRect r;
	srand( (unsigned)time( NULL ) );

	for(i=0;i<BlockSize;i++)
	{
		for(j=0;j<BlockSize;j++)
			bmp1.SetPixel(i,j,RGB(255,0,0));
	}
	for(i=0;i<width%BlockSize;i++)
	{
		for(j=0;j<BlockSize;j++)
			bmp2.SetPixel(i,j,RGB(255,0,0));
	}
	for(i=0;i<BlockSize;i++)
	{
		for(j=0;j<height%BlockSize;j++)
			bmp3.SetPixel(i,j,RGB(255,0,0));
	}
	for(i=0;i<width%BlockSize;i++)
	{
		for(j=0;j<height%BlockSize;j++)
			bmp4.SetPixel(i,j,RGB(255,0,0));
	}

	while(Flag)
	{
		for(j=0;j<BlockNum/20;j++)
		{
			Flag=FALSE;
			for(i=0;i<BlockNum;i++)
			{
				if(*(BlockFlag+i)==TRUE)
				{
					Flag=TRUE;
					break;
				}
			}
			if(Flag==FALSE)break;
			int var=rand();
			var%=(BlockNum);
			Flag1=FALSE;
			if(*(BlockFlag+var)==TRUE)	//如果相应随机位置尚未消去
			{
				*(BlockFlag+var)=FALSE;
				int curx,cury;
				curx=var%cx;
				cury=var/cx;

				if((XFlag==TRUE)&&(curx==cx-1)&&(YFlag==TRUE)&&(cury==cy-1))
				{
					bmp4.Display(curx*BlockSize+OriX,cury*BlockSize+OriY,&dc);
				}
				else if((XFlag==TRUE)&&(curx==cx-1))
				{
					bmp2.Display(curx*BlockSize+OriX,cury*BlockSize+OriY,&dc);
				}
				else if((YFlag==TRUE)&&(cury==cy-1))
				{
					bmp3.Display(curx*BlockSize+OriX,cury*BlockSize+OriY,&dc);
				}
				else
				{
					bmp1.Display(curx*BlockSize+OriX,cury*BlockSize+OriY,&dc);
				}
				Flag1=TRUE;
			}
		}
		if(Flag1==TRUE)Sleep(100);
	}

	Sleep(1000);

	Flag=TRUE;
	Flag1=FALSE;
	for(i=0;i<BlockNum;i++)
		*(BlockFlag+i)=TRUE;
	while(Flag)
	{
		for(j=0;j<BlockNum/20;j++)
		{
			Flag=FALSE;
			for(i=0;i<BlockNum;i++)
			{
				if(*(BlockFlag+i)==TRUE)
				{
					Flag=TRUE;
					break;
				}
			}
			if(Flag==FALSE)break;
			int var=rand();
			var%=BlockNum;
			Flag1=FALSE;
			if(*(BlockFlag+var)==TRUE)	//如果相应随机位置尚未消去
			{
				*(BlockFlag+var)=FALSE;
				int curx,cury;
				int k,l;
				curx=var%cx;
				cury=var/cx;
//				r.left=OriX+curx*10;
//				r.right=OriX+curx*10+10;
//				r.top=OriY+cury*10;
//				r.bottom=OriY+cury*10+10;

				if((XFlag==TRUE)&&(curx==cx-1)&&(YFlag==TRUE)&&(cury==cy-1))
				{
					for(k=0;k<width%BlockSize;k++)
					{
						for(l=0;l<height%BlockSize;l++)
						{
							COLORREF color=pDoc->m_mViewBmp.GetPixel(curx*BlockSize+k,cury*BlockSize+l);
							bmp4.SetPixel(k,l,color);
						}
					}
					bmp4.Display(curx*BlockSize+OriX,cury*BlockSize+OriY,&dc);
				}
				else if((XFlag==TRUE)&&(curx==cx-1))
				{
					for(k=0;k<width%BlockSize;k++)
					{
						for(l=0;l<BlockSize;l++)
						{
							COLORREF color=pDoc->m_mViewBmp.GetPixel(curx*BlockSize+k,cury*BlockSize+l);
							bmp2.SetPixel(k,l,color);
						}
					}
					bmp2.Display(curx*BlockSize+OriX,cury*BlockSize+OriY,&dc);
				}
				else if((YFlag==TRUE)&&(cury==cy-1))
				{
					for(k=0;k<BlockSize;k++)
					{
						for(l=0;l<height%BlockSize;l++)
						{
							COLORREF color=pDoc->m_mViewBmp.GetPixel(curx*BlockSize+k,cury*BlockSize+l);
							bmp3.SetPixel(k,l,color);
						}
					}
					bmp3.Display(curx*BlockSize+OriX,cury*BlockSize+OriY,&dc);
				}
				else
				{
					for(k=0;k<BlockSize;k++)
					{
						for(l=0;l<BlockSize;l++)
						{
							COLORREF color=pDoc->m_mViewBmp.GetPixel(curx*BlockSize+k,cury*BlockSize+l);
							bmp1.SetPixel(k,l,color);
						}
					}
					bmp1.Display(curx*BlockSize+OriX,cury*BlockSize+OriY,&dc);
				}
				Flag1=TRUE;
			}
		}
		if(Flag1==TRUE)Sleep(100);
	}
	
//	GetClientRect(&r);
//	SetScroll();
//	InvalidateRect(&r,TRUE);
//	UpdateWindow();	
	EndWaitCursor();	
}

void CBmpDemoView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	
	CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
	if(nChar==VK_UP)
	{
		ModuleDlg dlg1;
		dlg1.DoModal();
	}
}

void CBmpDemoView::OnTestFunction() 
{
	// TODO: Add your command handler code here
	CBmpDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CClientDC dc(this);
	int width=pDoc->m_mViewBmp.GetWidth();
	int height=pDoc->m_mViewBmp.GetHeight();
	memBITMAP bmp1;
	bmp1.CreateDirect(width,height);
	int i,j;
	for(i=0;i<width;i++)
	{
		for(j=0;j<height;j++)
		{
			COLORREF color=pDoc->m_mViewBmp.GetPixel(i,j);
			bmp1.SetPixel(i,j,color);
		}
	}

	for(i=0;i<100;i++)
	{
		bmp1.Display(0,i,&dc);
	}
}

⌨️ 快捷键说明

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