www.pudn.com > DigtalImageProc.rar > 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) 
{ 
	 
} 
 
void ImageNDFT(wComplex *Data,memBITMAP &m_mBmp) 
{ 
	 
} 
 
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;iabs()); 
			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;iabs()); 
			x=x>255?255:x; 
			m_mBmp.SetPixel(i,j,RGB(BYTE(x),BYTE(x),BYTE(x))); 
		} 
	} 
} 
void Imagemove(memBITMAP &sBmp,memBITMAP &dBmp) 
{ 
	int i,j,w = sBmp.GetWidth(),h = sBmp.GetHeight(); 
	 
	dBmp.ChangeSize(w,h); 
	 
	for(i = 0;i < w; i++) 
		for(j = 0; j < h; j++) 
			dBmp.SetPixel(i,j,sBmp.GetPixel(i,j)); 
	return; 
} 
 
void ImageHMirror(memBITMAP &sBmp,memBITMAP &dBmp) 
{ 
	int i,j,w = sBmp.GetWidth(),h = sBmp.GetHeight(); 
	 
	dBmp.ChangeSize(w,h); 
	 
	for(i = 0;i < w; i++) 
		for(j = 0; j < h; j++) 
			dBmp.SetPixel(w-i-1,j,sBmp.GetPixel(i,j)); 
	return; 
} 
void ImageVMirror(memBITMAP &sBmp,memBITMAP &dBmp) 
{ 
	int i,j,w = sBmp.GetWidth(),h = sBmp.GetHeight(); 
	 
	dBmp.ChangeSize(w,h); 
	 
	for(i = 0;i < w; i++) 
		for(j = 0; j < h; j++) 
			dBmp.SetPixel(i,h-j-1,sBmp.GetPixel(i,j)); 
	return; 
	 
} 
void ImageZoom(float zoom,memBITMAP &sBmp,memBITMAP &dBmp) 
{ 
	int i,j,w = sBmp.GetWidth(),h = sBmp.GetHeight(); 
	int cx = int(w*zoom+1),cy = int(h*zoom+1); 
	if(cx < 8 || cy < 8) 
	{ 
		AfxMessageBox("图象小于宽度或高度小于8点,可能已经完全失真"); 
		return; 
	} 
	dBmp.ChangeSize(cx,cy); 
 
	for(i = 0;i < w; i++) 
		for(j = 0; j < h; j++) 
			dBmp.SetPixel(int(i*zoom),int(j*zoom),sBmp.GetPixel(i,j)); 
	return; 
} 
 
void ImageRotate(int angle,memBitmap &sBmp,memBitmap &dBmp) 
{ 
	double sina = sin(3.14159*angle/180),cosa = cos(3.14159*angle/180); 
	int x,y,i,j; 
	int w = sBmp.GetWidth(),h = sBmp.GetHeight(); 
	int size = (int)sqrt(w*w+h*h); 
	int xoffset = int(h*sina); 
 
	dBmp.ChangeSize(size,size); 
	FillMemory(dBmp.bitData,size*size*3,255); 
	for(i = 0; i < w; i++) 
		for(j = 0; j < h; j++) 
		{ 
			x = int(i*cosa-j*sina+xoffset); 
			y = int(i*sina+j*cosa);			 
			dBmp.SetPixel(x,y,sBmp.GetPixel(i,j)); 
		} 
} 
 
void ImageGray(memBITMAP &sBmp,memBITMAP &dBmp) 
{ 
	int i,j,w = sBmp.GetWidth(),h = sBmp.GetHeight(); 
	COLORREF rgb; 
 
	dBmp.ChangeSize(w,h); 
	for(i = 0; i < w; i++) 
		for(j = 0; j < h; j++) 
		{ 
			rgb = sBmp.GetPixel(i,j); 
			int gray = int(0.299*GetRValue(rgb)+0.587*GetGValue(rgb)+0.114*GetBValue(rgb)+0.5); 
			dBmp.SetPixel(i,j,RGB(gray,gray,gray)); 
		} 
}