请高人帮忙看一下下面的代码有什么不对的地方!!万分感谢!!
×××××××××××××××××××××
BOOL WINAPI IFourier(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
 // 指向源图像的指针
 unsigned char* lpSrc;
 
 // 中间变量
 double dTemp;
 
 // 循环变量
 LONG i;
 LONG j;
 
 // 进行付立叶变换的宽度和高度(2的整数次方)
 LONG w;
 LONG h;
 
 int  wp;
 int  hp;
 
 // 图像每行的字节数
 LONG lLineBytes;
 
 // 计算图像每行的字节数
 lLineBytes = WIDTHBYTES(lWidth * 8);
 
 // 赋初值
 w = 1;
 h = 1;
 wp = 0;
 hp = 0;
 
 // 计算进行付立叶变换的宽度和高度(2的整数次方)
 while(w * 2 <= lWidth)
 {
  w *= 2;
  wp++;
 }
 
 while(h * 2 <= lHeight)
 {
  h *= 2;
  hp++;
 }
 
 // 分配内存
 complex<double> *TD = new complex<double>[w * h];
 complex<double> *FD = new complex<double>[w * h];
 double music,mu1,tt;
 // 行
 for(i = 0; i < h; i++)
 {
  // 列
  for(j = 0; j < w; j++)
  {
   // 指向DIB第i行,第j个象素的指针
   lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
   
   // 给时域赋值
   tt=*(lpSrc); tt*=100;
   //TD[j + w * i] = complex<double>(tt, 0);
   ///1lie ,1lie
   TD[j*h +  i] = complex<double>(tt, 0);
  }
 }
 mu1=0;
 for(i = 0; i < w; i++)
 {
  // 对x方向进行快速付立叶变换
  IFFT(&TD[h * i], &FD[h * i], hp);
 }
 
 // 保存变换结果
 for(i = 0; i < h; i++)
 {
  for(j = 0; j < w; j++)
  {
   TD[i*w +  j] = FD[j*h +  i];
  }
 }
 
 for(i = 0; i < h; i++)
 {
  // 对y方向进行快速付立叶变换
  IFFT(&TD[i * w], &FD[i * w], wp);
 }
 
 // 行
 int index;
 for(i = 0; i < h; i++)
 {
  // 列
  for(j = 0; j < w; j++)
  {
   // 计算频谱
   index=i*w+j;
   dTemp =(music= sqrt(FD[index].real() * FD[index].real() + 
 FD[index].imag() * FD[index].imag()) );
  if(music>mu1)mu1=music;
   // 判断是否超过255
   if (dTemp > 255)
   {
// 对于超过的,直接设置为255
dTemp = 255;
   }
   
   // 指向DIB第(i<h/2 ? i+h/2 : i-h/2)行,第(j<w/2 ? j+w/2 : j-w/2)个象素的指针    // 此处不直接取i和j,是为了将变换后的原点移到中心
   lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
   //lpSrc = (unsigned char*)lpDIBBits + lLineBytes * 
   // (lHeight - 1 - (i<h/2 ? i+h/2 : i-h/2)) + (j<w/2 ? j+w/2 : j-w/2);
   
   // 更新源图像
   * (lpSrc) = (BYTE)(dTemp);
  }
 }
 
 // 删除临时变量
 delete TD;
 delete FD;
 
 // 返回
 return TRUE;}
××××××××××××××××××××××××××××××
VOID  WINAPI  IFFT(complex<double>  *FD  ,  complex<double>  *TD  ,  int  r)  
{  
//  付立叶变换点数  
LONG            count;  

//  循环变量  
int                        i;  

complex<double>  *X;  

//  计算付立叶变换点数  
count  =  1  <<  r;  

//  分配运算所需存储器  
X  =  new  complex<double>[count];  

//  将频域点写入X  
memcpy(X,  FD,  sizeof(complex<double>)  *  count);  

//  求共轭  
for(i  =  0;  i  <  count;  i++)  
{  
X[i]  =  complex<double>  (X[i].real(),  -X[i].imag());  
}  

//  调用快速付立叶变换  
FFT(X,  TD,  r);  

//  求时域点的共轭  
for(i  =  0;  i  <  count;  i++)  
{  
TD[i]  =  complex<double>  (TD[i].real()  /  count,  -TD[i].imag()  /  count);  
}  

//  释放内存  
delete  X;  
}