图像平滑-邻域平均法

来源:互联网 发布:关口知宏评价中国 编辑:程序博客网 时间:2024/05/17 02:12
void CSDIELSView::OnSmoothingNeighbour(){//程序编制:李立宗  lilizong@gmail.com //2012-8-8if(myImage1.IsNull())OnOpenResourceFile();if(!myImage2.IsNull())myImage2.Destroy();if(myImage2.IsNull()){myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);}//COLORREF pixel; int maxY = myImage1.GetHeight();int maxX=myImage1.GetWidth();byte* pRealData;byte* pRealData2;pRealData=(byte*)myImage1.GetBits();pRealData2=(byte*)myImage2.GetBits();int pit=myImage1.GetPitch();int pit2=myImage2.GetPitch();//需要注意,pit和pit2的值并不一样,所以如果使用一个值,会导致不同的结果出现//CString str;//str.Format(TEXT("%d"),pit);//MessageBox(str);//str.Format(TEXT("%d"),pit2);//MessageBox(str);int bitCount=myImage1.GetBPP()/8;int bitCount2=myImage2.GetBPP()/8;int tempR,tempG,tempB;int temp,tempX,tempY;//tempR=tempG=tempG=0;//说明:将生产的图像作为24位图处理。for (int y=1; y<maxY-1; y++) {for (int x=1; x<maxX-1; x++) {tempR=(int)((float)(*(pRealData+pit*(y-1)+(x-1)*bitCount)+*(pRealData+pit*(y-1)+(x)*bitCount)+*(pRealData+pit*(y-1)+(x+1)*bitCount)+*(pRealData+pit*(y)+(x-1)*bitCount)+*(pRealData+pit*(y)+(x)*bitCount)+*(pRealData+pit*(y)+(x+1)*bitCount)+*(pRealData+pit*(y+1)+(x-1)*bitCount)+*(pRealData+pit*(y+1)+(x)*bitCount)+*(pRealData+pit*(y+1)+(x+1)*bitCount))/9+0.5);if(bitCount==1){tempG=tempR;tempB=tempR;}else{tempG=(int)((float)(*(pRealData+pit*(y-1)+(x-1)*bitCount+1)+*(pRealData+pit*(y-1)+(x)*bitCount+1)+*(pRealData+pit*(y-1)+(x+1)*bitCount+1)+*(pRealData+pit*(y)+(x-1)*bitCount+1)+*(pRealData+pit*(y)+(x)*bitCount+1)+*(pRealData+pit*(y)+(x+1)*bitCount+1)+*(pRealData+pit*(y+1)+(x-1)*bitCount+1)+*(pRealData+pit*(y+1)+(x)*bitCount+1)+*(pRealData+pit*(y+1)+(x+1)*bitCount+1))/9+0.5);tempB=(int)((float)(*(pRealData+pit*(y-1)+(x-1)*bitCount+1)+*(pRealData+pit*(y-1)+(x)*bitCount+1)+*(pRealData+pit*(y-1)+(x+1)*bitCount+1)+*(pRealData+pit*(y)+(x-1)*bitCount+1)+*(pRealData+pit*(y)+(x)*bitCount+1)+*(pRealData+pit*(y)+(x+1)*bitCount+1)+*(pRealData+pit*(y+1)+(x-1)*bitCount+1)+*(pRealData+pit*(y+1)+(x)*bitCount+1)+*(pRealData+pit*(y+1)+(x+1)*bitCount+1))/9+0.5);}*(pRealData2+pit2*y+x*bitCount2)=tempR;*(pRealData2+pit2*y+x*bitCount2+1)=tempG;*(pRealData2+pit2*y+x*bitCount2+2)=tempB;}}Invalidate();}

原创粉丝点击