扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:刘 涛 来源:pcvc.net 2007年11月16日
关键字:
void CDibView::OnMENUSobel() //灰度图像数据的获得参见天极网9.10日发表的拙作//VC { HANDLE data1handle; LPBITMAPINFOHEADER lpBi; CDibDoc *pDoc=GetDocument(); HDIB hdib; unsigned char *hData; unsigned char *data; hdib=pDoc->m_hDIB; BeginWaitCursor(); lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib); hData= lpbi +* (LPDWORD)lpbi + 256*sizeof(RGBQUAD); //得到指向位图像素值的指针 pDoc->SetModifiedFlag(TRUE);//设修改标志为"TRUE" data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight); //申请存放处理后的像素值的缓冲区 data=(unsigned char*)GlobalLock((HGLOBAL)data1handle); AfxGetApp()->BeginWaitCursor(); int i,j,buf,buf1,buf2; for( j=0; j for( i=0; i { if(((i-1)>=0)&&((i+1) {//对于图像四周边界处的向素点不处理 buf1=(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j-1)) +2*(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j)) +(int)(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j+1)); buf1=buf1-(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j-1)) -2*(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j)) -(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j+1)); //x方向加权微分 buf2=(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j+1)) +2*(int)(int)*(hData+(i)*WIDTHBYTES(lpBi->biWidth*8)+(j+1)) +(int)(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j+1)); buf2=buf2-(int)(int)*(hData+(i-1)*WIDTHBYTES(lpBi->biWidth*8)+(j-1)) -2*(int)(int)*(hData+(i)*WIDTHBYTES(lpBi->biWidth*8)+(j-1)) -(int)(int)*(hData+(i+1)*WIDTHBYTES(lpBi->biWidth*8)+(j-1)); //y方向加权微分 buf=abs(buf1)+abs(buf2);//求梯度 if(buf>255) buf=255; if(buf<0){buf=0; *(data+i*WIDTHBYTES(lpBi->biWidth*8)+j)=(BYTE)buf; } else *(data+i*lpBi->biWidth+j)=(BYTE)0; } for( j=0; j for( i=0; i *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j); //处理后的数据写回原缓冲区 AfxGetApp()->EndWaitCursor(); GlobalUnlock((HGLOBAL)hdib); GlobalUnlock(data1handle); GlobalFree(date1handle); EndWaitCursor(); Invalidate(TRUE); } |
![]() |
![]() |
![]() |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。