www.pudn.com > isee_code01231.zip > Convolute.cpp


//	δÍê³ÉÎļþ 
#include "stdafx.h" 
#include "Convolute.h" 
#include "math.h" 
 
void _fnSPE_Convolute(int *red,int *green,int *blue,int i,int j, 
				WORD wBytesPerLine,LPBYTE lpData,KERNEL *lpKernel) 
{ 
	BYTE b[9],g[9],r[9]; 
	LONG lOffset; 
 
	lOffset=(LONG)(i-1)*(LONG)wBytesPerLine+(LONG)((j-1)*4); 
	b[0]=*(lpData+lOffset++); 
	g[0]=*(lpData+lOffset++); 
	r[0]=*(lpData+lOffset); 
 
	lOffset=(LONG)(i-1)*(LONG)wBytesPerLine+(LONG)((j)*4); 
	b[1]=*(lpData+lOffset++); 
	g[1]=*(lpData+lOffset++); 
	r[1]=*(lpData+lOffset); 
 
	lOffset=(LONG)(i-1)*(LONG)wBytesPerLine+(LONG)((j+1)*4); 
	b[2]=*(lpData+lOffset++); 
	g[2]=*(lpData+lOffset++); 
	r[2]=*(lpData+lOffset); 
 
	lOffset=(LONG)(i)*(LONG)wBytesPerLine+(LONG)((j-1)*4); 
	b[3]=*(lpData+lOffset++); 
	g[3]=*(lpData+lOffset++); 
	r[3]=*(lpData+lOffset); 
 
	lOffset=(LONG)(i)*(LONG)wBytesPerLine+(LONG)((j)*4); 
	b[4]=*(lpData+lOffset++); 
	g[4]=*(lpData+lOffset++); 
	r[4]=*(lpData+lOffset); 
 
	lOffset=(LONG)(i)*(LONG)wBytesPerLine+(LONG)((j+1)*4); 
	b[5]=*(lpData+lOffset++); 
	g[5]=*(lpData+lOffset++); 
	r[5]=*(lpData+lOffset); 
 
	lOffset=(LONG)(i+1)*(LONG)wBytesPerLine+(LONG)((j-1)*4); 
	b[6]=*(lpData+lOffset++); 
	g[6]=*(lpData+lOffset++); 
	r[6]=*(lpData+lOffset); 
 
	lOffset=(LONG)(i+1)*(LONG)wBytesPerLine+(LONG)((j)*4); 
	b[7]=*(lpData+lOffset++); 
	g[7]=*(lpData+lOffset++); 
	r[7]=*(lpData+lOffset); 
 
	lOffset=(LONG)(i+1)*(LONG)wBytesPerLine+(LONG)((j+1)*4); 
	b[8]=*(lpData+lOffset++); 
	g[8]=*(lpData+lOffset++); 
	r[8]=*(lpData+lOffset); 
 
	*red=*green=*blue=0; 
	for(int k=0;k<8;++k) 
	{ 
		*red+=lpKernel->Element [k]*r[k]; 
		*green+=lpKernel->Element [k]*g[k]; 
		*blue+=lpKernel->Element [k]*b[k]; 
	} 
	if(lpKernel->Divisor !=1) 
	{ 
		*red/=lpKernel->Divisor ; 
		*green/=lpKernel->Divisor ; 
		*blue/=lpKernel->Divisor ; 
 
	} 
 
	*red=abs(*red); 
	*green=abs(*green); 
	*blue=abs(*blue); 
}