📄 bmpdemoview.cpp
字号:
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 + -