求翻译:一段VC++的SOBEL算子程序,怎么都类型不匹配……
vc++ SOBEL Delphi 类型
LPBYTE m_pImageBuf;
LPBYTE lpTempImgData;
memcpy(lpTempImgData,m_pImageBuf,m_lBufSize);
unsigned char o,nw,n,ne,w,e,sw,s,se;//,num;
char *lpPtr;
char *lptempPtr;
int x,y,temp;
for (y=1;y< m_nFrmHeight-1;y++)
{//轮廓提取
//注意 y 的范围是从 1 到高度-2
//lpPtr 指向原图数据,lpTempPtr 指向新图数据
lpPtr=(char *)m_pImageBuf+m_nFrmWidth*y;
lptempPtr=(char *)lpTempImgData+m_nFrmWidth*y;
for (x=1;x< m_nFrmWidth-1;x++)
{
//if(*(lpPtr+x)==0)
//{
//是个黑点
//查找八个相邻点
o=(unsigned char)*(lpPtr+x);
nw=(unsigned char)*(lpPtr+x+m_nFrmWidth-1);
n=(unsigned char)*(lpPtr+x+m_nFrmWidth);
ne=(unsigned char)*(lpPtr+x+m_nFrmWidth+1);
w=(unsigned char)*(lpPtr+x-1);
e=(unsigned char)*(lpPtr+x+1);
sw=(unsigned char)*(lpPtr+x-m_nFrmWidth-1);
s=(unsigned char)*(lpPtr+x-m_nFrmWidth);
se=(unsigned char)*(lpPtr+x-m_nFrmWidth+1);
//num=nw+n+ne+w+e+sw+s+se;
//if(num==0) //说明都是黑点
//*(lptempPtr+x)=(unsigned char)255;
//temp=(int) sqrtf( 1.0*(sw-*(lpPtr+x))*(sw-*(lpPtr+x))+(s-w)*(s-w) ) ;
temp=(abs(sw-nw)+abs(se-ne)+2*abs(s-n)+abs(sw-se)+abs(nw-ne)+2*abs(w-e));
if(temp >= 255) temp=255;
*(lptempPtr+x) = (unsigned char)temp;
//}
}
}
CopyMemory(pData, @]pBuffer, nBufferSize);