- void CSDIELSView::OnSharpeningLaplace()
- {
- //程序编制:李立宗 lilizong@gmail.com
- //2012-8-11
- if(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 tempX,tempY;
- int temp;
- //int M[3][3]={{1,2,1},{2,4,2},{1,2,1}};
- int t=100; //门限
- // tempR=tempG=tempG=0;
- //说明:将生产的图像作为24位图处理。
- for (int y=1; y<maxY-1; y++) {
- for (int x=1; x<maxX-1; x++) {
- temp=
- *(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)-8*(*(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);
- temp=abs(temp);
- if(temp>255)
- tempR=255;
- else
- tempR=temp;
- if(bitCount==1)
- {
- tempG=tempR;
- tempB=tempR;
- }
- else
- {
- temp=
- *(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)-8*(*(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);
- temp=abs(temp);
- if(temp>255)
- tempG=255;
- else
- tempG=temp;
-
-
- temp=
- *(pRealData+pit*(y-1)+(x-1)*bitCount+2)+*(pRealData+pit*(y-1)+(x)*bitCount+2)+*(pRealData+pit*(y-1)+(x+1)*bitCount+2)
- +*(pRealData+pit*(y)+(x-1)*bitCount+2)-8*(*(pRealData+pit*(y)+(x)*bitCount+2))+*(pRealData+pit*(y)+(x+1)*bitCount+2)
- +*(pRealData+pit*(y+1)+(x-1)*bitCount+2)+*(pRealData+pit*(y+1)+(x)*bitCount+2)+*(pRealData+pit*(y+1)+(x+1)*bitCount+2);
- temp=abs(temp);
- if(temp>255)
- tempB=255;
- else
- tempB=temp;
- }
-
- *(pRealData2+pit2*y+x*bitCount2)=tempR;
- *(pRealData2+pit2*y+x*bitCount2+1)=tempG;
- *(pRealData2+pit2*y+x*bitCount2+2)=tempB;
- }
- }
- Invalidate();
- }
|