19,468
社区成员
发帖
与我相关
我的任务
分享
//doc.cpp中
void C窗口分割Doc::FilterImage(CImage *image, int* smooth, float aver)
{
if(image->IsNull())
return;
int Temp[9];
memcpy(Temp,smooth,9*sizeof(int));
int i,j;
int Width=image->GetWidth();
int Height=image->GetHeight();
for(j=1;j<Height-1;j++)
for(i=1;i<Width-1;i++)
{
int r=0,g=0,b=0;
int index=0;
for(int col=-1;col<=1;col++)
for(int row=-1;row<=1;row++)
{
COLORREF clr=image->GetPixel(i+row,j+col);
r+=GetRValue(clr)*Temp[index];
g+=GetGValue(clr)*Temp[index];
b+=GetBValue(clr)*Temp[index];
}
r=int(r*aver);
g=int(g*aver);
b=int(b*aver);
if(r>255) r=255;
else if(r<0) r=-r;
if(g>255) g=255;
else if(g<0) g=-g;
if(b>255) b=255;
else if(b<0) b=-b;
image->SetPixel(i-1,j-1,RGB(r,g,b));//错位重写以避免前一个像素被覆盖
}
}
void C窗口分割Doc::On32777()
{
// TODO: 在此添加命令处理程序代码
if(!m_Image1.IsNull())
{
int smoothSobel[9]={-3,0,3,-10,0,10,-3,0,3};
CMainFrame* pMainWnd = (CMainFrame*) AfxGetMainWnd();
CLeftView * pView=(CLeftView * )pMainWnd->GetActiveView();
FilterImage(&m_Image1,smoothSobel,float(1.0/16.0));
UpdateAllViews(pView);
}
}
//LeftView.cpp中
void CLeftView::OnDraw(CDC* pDC)
{
C窗口分割Doc* pDoc =(C窗口分割Doc*) GetDocument();
// TODO: 在此添加绘制代码
CSize sizeTotal;
if(!pDoc->m_Image1.IsNull())
{
sizeTotal.cx = pDoc->m_Image1.GetWidth();
sizeTotal.cy = pDoc->m_Image1.GetHeight();
SetScrollSizes(MM_TEXT, sizeTotal);
pDoc->m_Image1.Draw(pDC->m_hDC,0,0);
}
}