📄 imagect.cpp
字号:
#include "stdafx.h"
#include "memBitmap.h"
#include "dft.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
void ImageDFT(wComplex *Data,memBITMAP &m_mBmp)
{
int width=m_mBmp.GetWidth();
int height=m_mBmp.GetHeight();
wFOURIOR hDft(width);
wFOURIOR vDft(height);
int i,j;
for(i=0;i<height;i++)
{
hDft.DFT(Data+i*width);
for(j=0;j<width;j++)
*(Data+i*width+j)/=(float)width;
}
BYTE *temp1=new BYTE[height*sizeof(wComplex)];
wComplex *vData=(wComplex*)temp1;
for(i=0;i<width;i++)
{
for(j=0;j<height;j++)
*(vData+j)=*(Data+j*width+i);
vDft.DFT(vData);
for(j=0;j<height;j++)
*(Data+j*width+i)=*(vData+j);
}
delete temp1;
for(i=0;i<width;i++)
{
for(j=0;j<height;j++)
{
int x=int((Data+j*width+i)->abs());
x=x>255?255:x;
x=x<0?0:x;
m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x)));
}
}
}
void ImageNDFT(wComplex *Data,memBITMAP &m_mBmp)
{
int width=m_mBmp.GetWidth();
int height=m_mBmp.GetHeight();
wFOURIOR hDft(width);
wFOURIOR vDft(height);
hDft.SetInverse();
vDft.SetInverse();
int i,j;
for(i=0;i<height;i++)
{
hDft.DFT(Data+i*width);
for(j=0;j<width;j++)
*(Data+i*width+j)/=(float)width;
}
BYTE *temp1=new BYTE[height*sizeof(wComplex)];
wComplex *vData=(wComplex*)temp1;
for(i=0;i<width;i++)
{
for(j=0;j<height;j++)
*(vData+j)=*(Data+j*width+i);
vDft.DFT(vData);
for(j=0;j<height;j++)
*(Data+j*width+i)=*(vData+j);
}
delete temp1;
for(i=0;i<width;i++)
{
for(j=0;j<height;j++)
{
int x=int((Data+j*width+i)->abs());
x=x>255?255:x;
x=x<0?0:x;
m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x)));
}
}
}
void ImageFFT(wComplex *Data,memBITMAP &m_mBmp)
{
int width=m_mBmp.GetWidth();
int height=m_mBmp.GetHeight();
wFOURIOR hDft(width);
wFOURIOR vDft(height);
int i,j;
for(i=0;i<height;i++)
{
if(!hDft.FFT(Data+i*width))return;
for(j=0;j<width;j++)
*(Data+i*width+j)/=(float)width;
}
BYTE *temp1=new BYTE[height*sizeof(wComplex)];
wComplex *vData=(wComplex*)temp1;
for(i=0;i<width;i++)
{
for(j=0;j<height;j++)
*(vData+j)=*(Data+j*width+i);
if(!vDft.FFT(vData))return;
for(j=0;j<height;j++)
*(Data+j*width+i)=*(vData+j);
}
delete temp1;
for(i=0;i<width;i++)
{
for(j=0;j<height;j++)
{
int x=int((Data+j*width+i)->abs());
x=x>255?255:x;
m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x)));
}
}
}
void ImageNFFT(wComplex *Data,memBITMAP &m_mBmp)
{
int width=m_mBmp.GetWidth();
int height=m_mBmp.GetHeight();
wFOURIOR hDft(width);
wFOURIOR vDft(height);
hDft.SetInverse();
vDft.SetInverse();
int i,j;
for(i=0;i<height;i++)
{
if(!hDft.FFT(Data+i*width))return;
for(j=0;j<width;j++)
*(Data+i*width+j)/=(float)width;
}
BYTE *temp1=new BYTE[height*sizeof(wComplex)];
wComplex *vData=(wComplex*)temp1;
for(i=0;i<width;i++)
{
for(j=0;j<height;j++)
*(vData+j)=*(Data+j*width+i);
if(!vDft.FFT(vData))return;
for(j=0;j<height;j++)
*(Data+j*width+i)=*(vData+j);
}
delete temp1;
for(i=0;i<width;i++)
{
for(j=0;j<height;j++)
{
int x=int((Data+j*width+i)->abs());
x=x>255?255:x;
m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x)));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -